Obrigado Jota, mas no seu exemplo eu vejo como atribuir um valor a chave primária da tabela que disparou exemplo. Eu eu não analisei direito.
Em 9 de novembro de 2011 12:13, JotaComm <[email protected]> escreveu: > 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 > >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
