Gibt es ein MySQL-Äquivalent SHOW CREATE TABLE
in postgres? Ist das möglich? Wenn nicht, welche ist die nächstbeste Lösung?
Ich benötige die Anweisung, weil ich sie zum Erstellen der Tabelle auf einem Remoteserver (über WCF) verwende.
Gibt es ein MySQL-Äquivalent SHOW CREATE TABLE
in postgres? Ist das möglich? Wenn nicht, welche ist die nächstbeste Lösung?
Ich benötige die Anweisung, weil ich sie zum Erstellen der Tabelle auf einem Remoteserver (über WCF) verwende.
Antworten:
Sie können versuchen, in der PostgreSQL-Protokolldatei zu verfolgen, was "pg_dump -t table -s" wirklich tut. Dann können Sie mit derselben Methode Ihre eigene SQL-Funktion schreiben.
pg_dump:
pg_dump -st tablename dbname
oder benutze die PostgreSQL GUI Tools (pgAdmin, phpPgAdmin usw.)
--schema-only
hat genau diesen Zweck: Zeigen Sie die SQL-Anweisungen an, um das Schema / die Tabelle zu erstellen. Sie können diese Ausgabe dann irgendwie in Ihr C # -Programm einspeisen.
.tar
Speicherauszug restore.sql
erstellen möchten , greifen Sie auf die Datei aus dem Archiv zu. Es hat alle create-Anweisungen.
In command line ( psql
) können Sie Folgendes ausführen: \d <table name>
um alle Spalten, ihre Typen und Indizes aufzulisten.
Aufbauend auf dem ersten Teil der Antwort von @ CubicalSoft können Sie die folgende Funktion einfügen, die für einfache Tabellen funktionieren soll (nimmt das Standardschema 'public' an und lässt Einschränkungen, Indizes und benutzerdefinierte Datentypen usw. usw. weg). Die @ RJS-Antwort ist im Moment die einzige Möglichkeit, dies richtig zu tun. das ist etwas, das in psql eingebaut werden sollte!
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;
Mir ist klar, dass ich ein bisschen zu spät zu dieser Party komme, aber dies war das erste Ergebnis meiner Google-Suche, also dachte ich, ich würde mit dem antworten, was ich mir ausgedacht habe.
Sie können mit dieser Abfrage ziemlich weit zu einer Lösung kommen, um die Spalten zu erhalten:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
Und dann diese Abfrage für die meisten gängigen Indizes:
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
Dann müssen die Abfragezeichenfolgen im richtigen Format erstellt werden.
Wie in https://serverfault.com/a/875414/333439 beantwortet , ist es mit dem \d <table>
Meta-Befehl in psql
möglich, die Tabellenstruktur in der Datenbank anzuzeigen. Wenn Sie die im Meta-Befehl verwendete Abfrage anzeigen möchten, können Sie den Befehl verwenden psql -E
. Wie in der Manpage beschrieben, gibt der -E
Switch die \d
Metabefehlsabfragen wieder. Sie können also starten psql -E
, die Tabellenstruktur mit dem \d <table>
Metabefehl anzeigen und je nach -E
Schalter die Abfrage anzeigen, die zur Beschreibung der Tabellenstruktur generiert wurde
In pgAdmin 4 finden Sie einfach die Tabelle im Baum auf der linken Seite, zB:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Wenn die Tabelle ausgewählt ist, öffnen Sie die SQL-Registerkarte auf der rechten Seite. Es zeigt die CREATE TABLE
für die ausgewählte Tabelle.
Die Postgres-Erweiterung ddlx ( https://github.com/lacanoid/pgddl ) leistet genau dies und mehr.