[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