Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION public.has_cascade_foreign_key(tabela character varying, valor_pk bigint)
- RETURNS integer
- LANGUAGE plpgsql
- AS $function$
- DECLARE
- sql TEXT;
- tbl_com_fk VARCHAR;
- col_com_fk VARCHAR;
- qtde INTEGER;
- retorno INTEGER;
- var_schema VARCHAR = '';
- var_tabela VARCHAR = '';
- rs RECORD;
- BEGIN
- retorno = 0;
- SELECT
- split_part(tabela,'.',1) AS nome_schema,
- split_part(tabela,'.',2) AS nome_tabela
- INTO var_schema,var_tabela;
- IF (var_tabela IS NULL OR var_tabela = '' ) THEN
- var_tabela = var_schema;
- var_schema = 'public';
- END IF;
- FOR rs IN
- SELECT
- (nf.nspname || '.' || clf.relname) AS tabela_principal,
- (af.attname) AS coluna_principal,
- (ct.conname) AS chave,
- (n.nspname || '.' || cl.relname) AS tabela_com_fk,
- (a.attname) AS coluna_com_fk
- FROM pg_catalog.pg_attribute a
- INNER JOIN pg_catalog.pg_class cl
- ON a.attrelid = cl.oid and cl.relkind = 'r'
- INNER JOIN pg_catalog.pg_namespace n
- ON n.oid = cl.relnamespace
- INNER JOIN pg_catalog.pg_constraint ct
- ON a.attrelid = ct.conrelid
- AND ct.confrelid <> 0
- AND ct.conkey[1] = a.attnum
- INNER JOIN pg_catalog.pg_class clf
- ON ct.confrelid = clf.oid
- AND clf.relkind = 'r'
- INNER JOIN pg_catalog.pg_namespace nf
- ON nf.oid = clf.relnamespace
- INNER JOIN pg_catalog.pg_attribute af
- ON af.attrelid = ct.confrelid
- AND af.attnum = ct.confkey[1]
- WHERE 1=1
- AND nf.nspname = var_schema
- AND (pg_get_constraintdef(ct.oid) LIKE '%ON DELETE CASCADE%')
- AND (UPPER(clf.relname) like UPPER(var_tabela))
- ORDER BY n.nspname,cl.relname,clf.relname
- LOOP
- tbl_com_fk = rs.tabela_com_fk;
- col_com_fk = rs.coluna_com_fk;
- IF (tbl_com_fk <> '') THEN
- sql := 'SELECT COUNT(*) FROM ' || tbl_com_fk || ' WHERE ' || col_com_fk || ' = ' || valor_pk;
- EXECUTE sql INTO qtde;
- END IF;
- IF (qtde > 0) THEN
- RETURN 1;
- END IF;
- END LOOP;
- RETURN retorno;
- END;
- $function$
- ;
- ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement