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

Responder a