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