[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