Existe um equivalente ao MySQL SHOW CREATE TABLE
no Postgres? Isso é possível? Se não, qual é a próxima melhor solução?
Preciso da instrução porque a uso para criar a tabela em um servidor remoto (através do WCF).
Existe um equivalente ao MySQL SHOW CREATE TABLE
no Postgres? Isso é possível? Se não, qual é a próxima melhor solução?
Preciso da instrução porque a uso para criar a tabela em um servidor remoto (através do WCF).
Respostas:
Você pode tentar rastrear no arquivo de log do PostgreSQL o que "pg_dump -t table -s" realmente faz. Em seguida, você pode usar o mesmo método para escrever sua própria função sql.
-E
opção para rastrear o que está acontecendo em segundo plano ao executar um psql
comando - -E: will describe the underlaying queries of the \ commands (cool for learning!)
- HTH!
pg_dump:
pg_dump -st tablename dbname
ou use as ferramentas da GUI do PostgreSQL (pgAdmin, phpPgAdmin, etc.)
--schema-only
tem este propósito exato: Mostre as instruções SQL para criar o esquema / tabela. Você pode alimentar essa saída no seu programa C # de alguma forma.
.tar
, pegue o restore.sql
arquivo do arquivo morto. Tem todas as instruções de criação.
Na linha de comando ( psql
), você pode executar: \d <table name>
para listar todas as colunas, seus tipos e índices.
Com base na primeira parte da resposta do @ CubicalSoft, você pode inserir 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.). A resposta do @RJS é a única maneira de fazê-lo corretamente no momento; isso é algo que deve ser incorporado ao 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;
Percebo que estou um pouco atrasado para esta festa, mas esse foi o primeiro resultado da minha Pesquisa no Google; então, pensei em responder com o que descobri.
Você pode ir muito longe em direção a uma solução com esta 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
É uma questão de criar as strings de consulta no formato correto.
Conforme respondido em https://serverfault.com/a/875414/333439 , com o \d <table>
meta-comando in psql
é possível mostrar a estrutura da tabela no banco de dados. Se você quiser ver a consulta usado em meta-comando, você pode usar o comando psql -E
. Conforme descrito na página de manual, o -E
switch faz eco das \d
consultas de meta-comandos. Assim, você pode iniciar psql -E
, visualizar a estrutura da tabela com \d <table>
meta-comando e, de acordo com a -E
opção, visualizar a consulta gerada para descrever a estrutura da tabela
No pgAdmin 4 , encontre a tabela na árvore à esquerda, por exemplo:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Quando a tabela estiver selecionada, abra a guia SQL à direita. Ele exibe o CREATE TABLE
da tabela selecionada.
A extensão ddlx do Postgres ( https://github.com/lacanoid/pgddl ) faz exatamente isso e muito mais.