¿Hay un equivalente de MySQL SHOW CREATE TABLE
en Postgres? es posible? Si no, ¿cuál es la siguiente mejor solución?
Necesito la declaración porque la uso para crear la tabla en un servidor remoto (sobre WCF).
¿Hay un equivalente de MySQL SHOW CREATE TABLE
en Postgres? es posible? Si no, ¿cuál es la siguiente mejor solución?
Necesito la declaración porque la uso para crear la tabla en un servidor remoto (sobre WCF).
Respuestas:
Puede intentar rastrear en el archivo de registro de PostgreSQL lo que realmente hace "pg_dump -t table -s". Luego puede usar el mismo método para escribir su propia función sql.
pg_dump:
pg_dump -st tablename dbname
o use PostgreSQL GUI Tools (pgAdmin, phpPgAdmin, etc.)
--schema-only
tiene este propósito exacto: mostrar las instrucciones SQL para crear el esquema / tabla. Puede alimentar esta salida en su programa C # de alguna manera.
.tar
, tome el restore.sql
archivo del archivo. Tiene todas las declaraciones de creación.
En la línea de comando ( psql
) puede ejecutar: \d <table name>
para enumerar todas las columnas, sus tipos e índices.
Partiendo de la primera parte de la respuesta de @ CubicalSoft, puede colocar la siguiente función que debería funcionar para tablas simples (asume el esquema 'público' predeterminado y omite restricciones, índices y tipos de datos definidos por el usuario, etc.). La respuesta de @RJS es la única forma de hacerlo correctamente en este momento; ¡Esto es algo que debería integrarse en 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;
Me doy cuenta de que llego un poco tarde a esta fiesta, pero este fue el primer resultado de mi Búsqueda de Google, así que pensé que respondería con lo que se me ocurrió.
Puede llegar bastante lejos hacia una solución con esta consulta para obtener las columnas:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
Y luego esta consulta para los índices más comunes:
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
Entonces se trata de construir las cadenas de consulta en el formato correcto.
Como se respondió en https://serverfault.com/a/875414/333439 , con el \d <table>
metacomando psql
es posible mostrar la estructura de la tabla en la base de datos. Si desea ver la consulta utilizada en el metacomando, puede usar el comando psql -E
. Como se describe en la página de manual, el -E
conmutador repite las \d
consultas de metacomandos. Por lo tanto, puede iniciar psql -E
, puede ver la estructura de la tabla con \d <table>
metacomando y, de acuerdo con el -E
modificador, puede ver la consulta generada para describir la estructura de la tabla
En pgAdmin 4 , solo encuentre la tabla en el árbol de la izquierda, por ejemplo:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Cuando se selecciona la tabla, abra la pestaña SQL a la derecha. Muestra el CREATE TABLE
para la tabla seleccionada.
La extensión ddlx de Postgres ( https://github.com/lacanoid/pgddl ) hace exactamente esto y más.