it-swarm.com.de

Gibt es ein Äquivalent zu MySQL SHOW CREATE TABLE in Postgres?

Gibt es ein Äquivalent zu MySQLs SHOW CREATE TABLE in Postgres? Ist das möglich? Wenn nicht, was ist die nächstbeste Lösung?

Ich benötige die Anweisung, weil ich sie zum Erstellen der Tabelle auf einem Remote-Server (über WCF) verwende.

82
vlebar

Sie können versuchen, in der PostgreSQL-Protokolldatei zu verfolgen, was "pg_dump -t table -s" wirklich tut. Dann können Sie dieselbe Methode verwenden, um Ihre eigene SQL-Funktion zu schreiben.

30
RJS

pg_dump:

pg_dump -st tablename dbname

oder verwenden Sie die PostgreSQL-GUI-Tools (pgAdmin, phpPgAdmin usw.)

49
alvosu

In der Befehlszeile (psql) können Sie Folgendes ausführen: \d <table name>, um alle Spalten, ihre Typen und Indizes aufzulisten.

20

Aufbauend auf dem ersten Teil der Antwort von @ CubicalSoft können Sie die folgende Funktion verwenden, die für einfache Tabellen funktionieren sollte (nimmt das Standardschema 'public' an und lässt Einschränkungen, Indizes und benutzerdefinierte Datentypen usw. usw. weg). @RJS Antwort ist der einzige Weg, um es im Moment richtig zu machen; Dies 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;
7
EoghanM

Mir ist klar, dass ich zu spät zu dieser Party komme, aber dies war das erste Ergebnis meiner Google-Suche, also dachte ich mir, ich würde mit dem antworten, was ich mir ausgedacht habe.

Mit dieser Abfrage können Sie ziemlich weit in Richtung 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 geht es darum, die Abfragezeichenfolge (n) im richtigen Format aufzubauen.

6
CubicleSoft

Wie in https://serverfault.com/a/875414/333439 beantwortet, ist es mit dem Meta-Befehl \d <table> In psql möglich, die Tabellenstruktur in anzuzeigen Datenbank. Wenn Sie die im Meta-Befehl verwendete Abfrage anzeigen möchten, können Sie den Befehl psql -E Verwenden. Wie in der Manpage beschrieben, gibt der Schalter -E Die Meta-Befehlsabfragen \d Wieder. Sie können also psql -E Starten, die Tabellenstruktur mit dem Meta-Befehl \d <table> Anzeigen und gemäß dem Schalter -E Die Abfrage anzeigen, die zur Beschreibung der generiert wurde Tabellenstruktur

2
Enrico Bianchi

Suchen Sie in pgAdmin 4 einfach die Tabelle im Baum links, z.

Servers
+ PostgreSQL 11
  + Databases
    + MYDATABASENAME
      + Schemas
        + public
          + Tables
            + MYTABLENAME  <-- click this tree element

Wenn die Tabelle ausgewählt ist, öffnen Sie rechts die Registerkarte SQL . Es zeigt das CREATE TABLE für die ausgewählte Tabelle.

0
Christopher K.

Die Postgres-Erweiterung ddlx ( https://github.com/lacanoid/pgddl ) macht genau dies und mehr.

0
Žiga