[PostgreSQL-Brasil] Procedure

Euler Taveira de Oliveira euler em timbira.com
Sexta Abril 27 01:40:33 UTC 2007


Alcione Benacchio wrote:

> 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.
> 
Bom, não é a solução perfeita mas olhando rapidamente como está obtendo
o nome da chave primária, sequência, proponho que faça como abaixo.
Funciona bem se todas as suas tabelas tem somente um campo serial como chave
primária (que pelo seu script é o que você faz). Estou muito cansado
para propor uma solução genérica. :(

SELECT
	t.relname as tabela,
	s.relname as sequencia,
	c.nspname as esquema_sequencia,
	p.attname as campo_chave
FROM
	pg_depend,
	pg_class t,
	pg_class s,
	pg_namespace c,
	pg_attribute p
WHERE
	t.oid = refobjid AND
	s.oid = objid AND
	deptype = 'a' AND
	s.relkind = 'S' AND
	c.oid = s.relnamespace AND
	attrelid = t.oid AND
	attnum = refobjsubid AND
	nspname = 'public';

> problema numero 1:
> EXECUTE 'SELECT max('||pk||') INTO'|| seq ||' FROM '|| tabela;
> Retorna o seguinte erro: ERROR: cannot EXECUTE a null querystring
> 
Pode ser algo relacionado com a sua consulta não estar retornando os
dados corretos.

> Não está funcionando esse Fetch, eu não consigo fazer ele avançar...
> o q está errado nele?
> 
Não é FETCH NEXT FROM é somente FETCH.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/



Mais detalhes sobre a lista de discussão Brasil-Usuarios