Olá, Émerson
Em 13 de maio de 2011 11:23, JotaComm <[email protected]> escreveu: > Olá, > > Em 13 de maio de 2011 11:02, Emerson Martins > <[email protected]>escreveu: > > Olá pessoal! >> >> Tenho seguinte duvida.Nosso banco de dados tem uma função que atualiza os >> IDs de todas as tabelas.. >> Como sempre temos algumas importações previstas e imprevistas de outros >> banco de Dados que estar em fase de migração. >> >> Desenvolvemos a seguinte função! >> >> CREATE OR REPLACE FUNCTION updatesequences() >> RETURNS character varying AS >> $BODY$ >> declare >> seqrecord record; >> maxrecord record; >> maxvalue integer; >> begin >> for seqrecord in select relname,split_part(relname,'_id_seq',1) tabela, >> 'id' coluna from pg_statio_user_sequences >> where relname not like 'audit_log_%' >> and relname not like 'auth_%' >> and relname not like 'django_%' Loop >> for maxrecord in execute 'select max(id) as f1 from ' || >> seqrecord.tabela LOOP >> maxvalue:=maxrecord.f1; >> end loop; >> execute 'alter sequence ' || seqrecord.relname || ' restart with ' || >> coalesce(maxvalue,0)+1 ; >> End LOOP; >> return 1; >> end >> $BODY$ >> LANGUAGE plpgsql VOLATILE >> > Uma outra possibilidade de consulta para você fazer isso seria: DO $$ DECLARE sequencia information_schema.sequences.sequence_name%TYPE; BEGIN FOR sequencia IN SELECT sequence_schema||'.'||sequence_name FROM information_schema.sequences LOOP EXECUTE 'SELECT setval(sequence_name::regclass,last_value+1) FROM ' || sequencia; END LOOP; END; $$ LANGUAGE PLPGSQL > >> Então..Preciso que essa função seja executada de tempos em tempo através >> de trigger evitando problemas com as sequences que as vezes ficam >> desatualizadas ou com uma numeração errada! >> > > Se for para agendar você pode colocar no cron do usuário postgres ou ainda > usar o PgAgent para fazer o agendamento de jobs. > > Agora a questão da função ter que ser disparada por um trigger não sei se é > necessário. Acredito que simplesmente pode ser executada de tempos em tempos > e verificar se a seqüencia realmente precisa ser alterada. > > >> Alguma sugestão! >> >> Emerson Martins >> Analista de Banco de Dados >> 82 9123-5504 >> 82 9668-1283 >> >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> >> > > Abraços > -- > JotaComm > http://jotacomm.wordpress.com > Abraços -- JotaComm http://jotacomm.wordpress.com
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
