Olá pessoal,
Estive em umas das palestras do PgBr deste ano  “Estatísticas e monitoramento e 
diagnósticos através do catalogo do PostgreSQL” e expus um problema que havia 
ocorrido na mesma semana referente a catálogo, demorei um pouco para postar 
porque estava tentando simular novamente o problema.
Informações:
SO: Ubuntu Server, mas fiz um teste no Win e também tive o problema, acho que 
independe do SO.
PostgreSQl: 8.3.5 compilado.
Echema: Public
Encodig UTF8

Quando é executado o passo 4, alterando o tipo do campo, a ligação b.attrelid = 
a.relfilenode deixa de ser verdadeira, b.attrelid muda de valor. Assim o select 
passo 5 que é igual ao passo 3 não encontra mais o registro.
Fiz algum teste de renomear a coluna e o mesmo não ocorre, aparentemente isso 
acontece apenas quando altero o tipo de dados. Obs. A mesma situação ocorre na 
versão 9.1.
Não sei se é forma em que consulto o catálogo que está incorreta, e se alguém 
já passou por esse tipo de problema.
Agradeço pela habitual cordialidade que sempre tive na lista.

-- 1º
CREATE DATABASE rteste
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       CONNECTION LIMIT = -1;

-- 2º
CREATE TABLE tab_teste
(
  co_coluna numeric
)
WITH (
  OIDS=FALSE
);
ALTER TABLE tab_teste OWNER TO postgres;

-- 3º Encontra tabela e campo
SELECT a.relname AS Tabela, b.attname AS Campo
FROM pg_class a 
JOIN pg_attribute b ON  b.attrelid = a.relfilenode
WHERE  a.relname = 'tab_teste' AND b.attname = 'co_coluna';

-- 4º Provoca o problema
ALTER TABLE tab_teste ALTER COLUMN co_coluna TYPE double precision;

-- 5º Não encontra mais tabela e campo
SELECT a.relname AS Tabela, b.attname AS Campo
FROM pg_class a 
JOIN pg_attribute b ON  b.attrelid = a.relfilenode
WHERE  a.relname = 'tab_teste' AND b.attname = 'co_coluna';
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a