Existe algum equivalente no MySQL de SHOW CREATE TABLE no postgres?

48

Existe um equivalente do MySQL de SHOW CREATE TABLE no postgres? Isso é possível? Se não qual é a próxima melhor solução?

Eu preciso da declaração porque eu a uso para criar a tabela em um servidor remoto (sobre WCF).

    
por vlebar 06.02.2011 / 22:49

6 respostas

21

Você pode tentar rastrear no arquivo de log do PostgreSQL o que "pg_dump -t table -s" realmente faz. Então você pode usar o mesmo método para escrever sua própria função sql.

    
por 07.02.2011 / 00:29
26

pg_dump:

pg_dump -st tablename dbname

ou use as ferramentas gráficas do PostgreSQL (pgAdmin, phpPgAdmin, etc.)

    
por 06.02.2011 / 22:52
9

Na linha de comando ( psql ) você pode executar: \d <table name> para listar todas as colunas, seus tipos e índices.

    
por 25.09.2017 / 20:58
4

Eu percebo que estou um pouco atrasado para essa festa, mas esse foi o primeiro resultado da minha Pesquisa do Google, então imaginei que responderia com o que surgisse.

Você pode ir muito longe em uma solução com essa consulta para obter as colunas:

SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;

E então esta consulta para os índices mais comuns:

SELECT c.oid, c.relname, a.attname, a.attnum, i.indisprimary, i.indisunique
FROM pg_index AS i, pg_class AS c, pg_attribute AS a
WHERE i.indexrelid = c.oid AND i.indexrelid = a.attrelid AND i.indrelid = 'YOURSCHEMA.YOURTABLE'::regclass
ORDER BY" => "c.oid, a.attnum

Então, é uma questão de construir a (s) string (s) de consulta no formato correto.

    
por 23.05.2014 / 04:43
2

Como foi respondido no link , com o \d <table> meta-comando em psql é possível mostrar a tabela estrutura no banco de dados. Se você quiser ver a consulta usada no meta-comando, você pode usar o comando psql -E . Conforme descrito na página manpage, a opção -E ecoa as consultas de meta-comandos \d . Então, você pode lançar psql -E , você pode ver a estrutura da tabela com \d <table> meta-command e, de acordo com -E switch, você pode ver a consulta gerada para descrever a estrutura da tabela

    
por 31.07.2018 / 12:28
1

Com base na primeira parte da resposta da @CubicalSoft você pode colocar a seguinte função que deve funcionar para tabelas simples (assume o esquema 'público' padrão e omite restrições, índices e tipos de dados definidos pelo usuário etc. etc.). A resposta do @RJS é a única maneira de fazê-lo corretamente no momento; isso é algo que deve ser construído no psql!

CREATE OR REPLACE FUNCTION show_create_table(table_name text, join_char text = E'\n' ) 
  RETURNS text AS 
$BODY$
SELECT 'CREATE TABLE ' || $1 || ' (' || $2 || '' || 
    string_agg(column_list.column_expr, ', ' || $2 || '') || 
    '' || $2 || ');'
FROM (
  SELECT '    ' || column_name || ' ' || data_type || 
       coalesce('(' || character_maximum_length || ')', '') || 
       case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
  FROM information_schema.columns
  WHERE table_schema = 'public' AND table_name = $1
  ORDER BY ordinal_position) column_list;
$BODY$
  LANGUAGE SQL STABLE;
    
por 04.09.2016 / 09:29