Olá, Marllos Não entendi muito bem o que você quer, mas fiz um código rápido aqui, mas veja se ajuda:
Em 9 de novembro de 2011 11:17, Marllos <[email protected]> escreveu: > Obrigado JotaComm > > No firebird, eu tenho que fazer uma trigger para cada tabela. No > Postgresql eu percebi (se não estou enganado) que eu posso usar a mesma > função de trigger em várias tabelas e é isso que estou tentando fazer. > > a minha função de trigger seria > > create or replace function *gerar_id()* returns trigger as $$ > begin > --essa trigger define a chave primária > --as tabelas que vão disparar essa trigger são tabela1, tabela2, > tabela3, ... (muitas) > --essas tabelas já existem e cada uma tem uma chave primária, do mesmo > tipo, mas com nomes diferentes > > new.(nome da chave primária da tabela que está disparando essa trigger) = > uuid_generate_v4() > > end > $$ language plpgsql; > CREATE OR REPLACE FUNCTION f_teste() RETURNS TRIGGER AS $$ DECLARE nome_da_tabela VARCHAR:=NULL; chave_primaria VARCHAR:=NULL; atributo_chave_primaria VARCHAR:=NULL; BEGIN SELECT pg_class.relname, pg_attribute.attname, pg_constraint.conname INTO nome_da_tabela, chave_primaria, atributo_chave_primaria FROM pg_class JOIN pg_attribute ON pg_class.oid=pg_attribute.attrelid JOIN pg_constraint ON pg_class.oid=pg_constraint.conrelid WHERE pg_class.relname=TG_TABLE_NAME AND pg_attribute.attnum>0 AND pg_constraint.contype='p'; RAISE NOTICE 'Tabela: % - Nome do atributo: % - Nome da chave primaria: %',nome_da_tabela,chave_primaria,atributo_chave_primaria; RETURN NEW; END; $$ LANGUAGE PLPGSQL; > > Agora eu quero usar essa trigger em várias tabelas: > > create tigger tabela1_tg before insert on tabela1 > for each row execute *gerar_id()*; > > create tigger tabela2_tg before insert on tabela2 > for each row execute *gerar_id()*; > > create tigger tabela3_tg before insert on tabela3 > for each row execute *gerar_id()*; > > Etc... > > Em 9 de novembro de 2011 10:17, JotaComm <[email protected]> escreveu: > > Olá, Marllos >> >> Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz < >> [email protected]> escreveu: >> >> Acredito que uma forma seja usando PL/Python: >>> >>> http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html >>> >>> Já procurei como fazer com PL/pgSQL, mas não encontrei como referenciar >>> dinamicamente o nome do atributo de chave primária. >>> >>> Você precisará consultar o catálogo, através da pg_attribute (attname) e >>> da pg_constraint (contype='p'). >>> >>> Em 9 de novembro de 2011 10:02, Marllos <[email protected]>escreveu: >>> >>>> Por favor, preciso de ajuda para revolver um problema. E se for >>>> possível gostaria de um exemplo. >>>> >>>> Em uma trigger, eu quero alterar a chave primária da tabela que dispara >>>> essa trigger, mas de forma dinâmica, por exemplo: >>>> >>>> new.(referencia dinâmica a chave primária da tebela) = valor. >>>> >>> >> Não entendi o que você deseja. Poderia colocar um exemplo prático da >> situação. >> >>> >>>> Obrigado. >>>> >>>> Marllos. >>>> _______________________________________________ >>>> pgbr-geral mailing list >>>> [email protected] >>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>>> >>>> >>> >>> >>> -- >>> Daniel Cristian Cruz >>> クルズ クリスチアン ダニエル >>> >>> _______________________________________________ >>> pgbr-geral mailing list >>> [email protected] >>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>> >>> >> >> Abraços >> -- >> JotaComm >> http://jotacomm.wordpress.com >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> >> > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > Abraços -- JotaComm http://jotacomm.wordpress.com
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
