[PostgreSQL-Brasil] Procedure
Alcione Benacchio
benacchio em gmail.com
Quinta Abril 26 11:40:52 UTC 2007
Olá a todos,
Eu estou tentando fazer procedure que funciona assim:
Eu passo por parâmetro o schema, ele varre a tabela de tabelas do
postgres, escreve uma lista tabelas, pk, e o nome das sequencias.
Apartir daí eu faço uma seleção com MAX para descobrir a chave pk com
maior valor, aih seto o valor na minha sequencia. A idéia é que daí eu
posso atualizar o sequencia de um schema inteiro.
Depois que fizer funcionar vou fazer varrer a tabela de sequences, vai
trazer um nome mais confiável... mas se eu fizer funcionar assim por
enquanto já resolve meu problema.
problema numero 1:
EXECUTE 'SELECT max('||pk||') INTO'|| seq ||' FROM '|| tabela;
Retorna o seguinte erro: ERROR: cannot EXECUTE a null querystring
A "tabela" é uma variável e "pk" também, será que tem outro jeito de
fazer essa consulta usando essas variáveis no FROM? e no max?
problema numero 2:
Não está funcionando esse Fetch, eu não consigo fazer ele avançar...
o q está errado nele?
Qualquer idéia aí já ajuda! abraço
CREATE OR REPLACE FUNCTION public.last_seq(schema_sequence varchar)
RETURNS void AS
$body$
DECLARE
sequencias CURSOR FOR SELECT schemaname||
'.'||tablename||'_id_'||tablename||'_seq' as sequencias, schemaname||
'.'||tablename as tabela, 'id_'||tablename as pk FROM pg_tables WHERE
schemaname = schema_sequence ORDER BY 1;
nome_sequencia regclass;
tabela varchar;
pk varchar;
seq bigint;
BEGIN
OPEN sequencias;
FETCH sequencias INTO nome_sequencia, tabela, pk;
WHILE FOUND LOOP
EXECUTE 'SELECT max('||pk||') INTO'|| seq ||' FROM '|| tabela;
SELECT setval(nome_sequencia, seq);
--FETCH FORWARD 1 FROM sequencias;
--FETCH sequencias INTO nome_sequencia, tabela, pk;
FETCH NEXT FROM sequencias INTO nome_sequencia, tabela, pk;
END LOOP;
CLOSE sequencias;
END
$body$
LANGUAGE 'plpgsql';
Mais detalhes sobre a lista de discussão Brasil-Usuarios