Sql para selecionar nomes de tabelas e colunas no postgres
Um simples sql para quem quer buscar colunas e tabelas no Postgres
select c.relname, a.attname as "Column", pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype" from pg_catalog.pg_attribute a inner join pg_stat_user_tables c on a.attrelid = c.relid WHERE a.attnum > 0 AND NOT a.attisdropped order by c.relname, a.attname
Cara, esse select salvou minha vida!
NUNCA ia conseguir fazer isso sozinho, vlw mano
agora vou fazer uma rotininha de atualizacao de banco de dados
=D fico feliz em ter ajudado, poste sua rotina pra ajudar os demais caso seja interessante =]
Entao.. fiz a rotina, mas eh em delphi…
o meu sql ficou assim:
select
c.relname as tabela,
a.attname as coluna,
d.adsrc as default,
pg_catalog.format_type(a.atttypid, a.atttypmod) as tipo
from pg_catalog.pg_attribute a
inner join pg_stat_user_tables c on a.attrelid = c.relid
left join pg_catalog.pg_attrdef d on d.adrelid = c.relid and a.attnum = d.adnum
WHERE a.attnum > 0 AND NOT a.attisdropped
order by c.relname, a.attname
andei fuçando um pokinho mais nas funcoes do pg
Usei tbm o seguinte para os sequences:
SELECT relname as sequence from pg_class where relkind=’S’ ;
pois no meu bd tem muitos sequences (especialmente se vc usa o tipo serial – auto incremento)
Uma vez que eu tenho os sequences, tabelas, colunas, tipos e defaults teoricamente posso re-construir o banco de dados.
É claro que falta as functions/triggers e tal, mas nem uso, entao nao me interessei em saber.
Dai eu pego um banco mais atual que eu tenho e outro para ser atualizado. Rodo os sql e vejo quais sequences tem no novo e no velho nao, crio estes. Depois vejo quais campos tem no novo e no velho nao e os crio tbm, prestando atencao para se ele nao encontrou a tabela entao ele a cria vazia, antes de criar os campos.
falta só fazer testes para se o tipo ou o default do campo foi alterado, dai terei de alterar no banco velho, mas isso fica mais para frente
Meu amigo, MUITO OBRIGADO!
Já tenho até uma biblioteca desses scripts extremamente úteis. Mais um pra coleção.
MUITO OBRIGADO MESMO!