Gostaria de produzir um dicionário de dados a partir das tabelas de catálogo de um banco de dados Postgres. Eu queria ter o nome da tabela em uma linha e depois a lista de colunas.
Eu tentei fazer isso com \gexec
:
\set schema '''my_schema'''
\set fname 'out_file.txt'
\o :fname
SELECT format('
select ''>>> %I'';
select column_name, data_type, coalesce(character_maximum_length, numeric_precision), description
from information_schema.columns
left join pg_catalog.pg_description on objoid = ''%I.%I''::regclass and objsubid = ordinal_position
where table_name = ''%I''', table_name, table_schema, table_name, table_name)
FROM
information_schema.tables
where table_schema = :schema
order by table_name
\gexec
\o
Mas a primeira afirmação parece ter sido omitida e o nome da tabela não aparece no resultado.
Claro, eu poderia simplesmente adicionar o nome da tabela em cada linha, mas para o meu propósito, isso significa um processo extra depois de colocar tudo isso em uma documentação adequada.
Existe uma maneira de ter o resultado das 2 consultas no arquivo de resultados?
\gexec
...Ousada ênfase minha.
Atualmente, você gera uma coluna com diversas instruções. Coloque cada afirmação em uma coluna separada para atingir seu objetivo:
Observe algumas pequenas correções nas citações de nomes.
Aparte
coalesce(character_maximum_length, numeric_precision)
parece estranho: está juntando dois números bastante distintos.Além disso, prefiro consultar o catálogo do sistema
pg_attribute
para obter melhores informações sobre tipos e armazenamento - entre outras coisas. Relacionado: