Frage Gibt es in Postgres ein MySQL-Äquivalent von SHOW CREATE TABLE?


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

Ich brauche die Anweisung, weil ich sie verwende, um die Tabelle auf einem Remote-Server (über WCF) zu erstellen.


47
2018-02-06 21:49


Ursprung




Antworten:


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.


21
2018-02-06 23:29



ok, ich habe den pg_dump verfolgt. Aber es war nicht so einfach, weil ich meine eigene Funktion in C # schreiben musste, um die create table-Anweisung zu schreiben. Aber es war eine große Hilfe, also danke veeeeerrrryyyy viel. : D - vlebar


pg_dump:

pg_dump -st tablename dbname

oder benutze die PostgreSQL GUI Tools (pgAdmin, phpPgAdmin, etc.)


25
2018-02-06 21:52



Ich werde versuchen, das Problem genauer zu erklären. Ich brauche die SQL-Anweisung (Select oder gespeicherte Prozedur), weil ich den SQL-Befehl in C # (NpgsqlCommand) ausführen. Also denke ich, dass der pg_dump in diesem Fall nicht die Lösung ist. :( - vlebar
Warum nicht? --schema-only hat genau diesen Zweck: Zeigen Sie die SQL-Anweisungen zum Erstellen des Schemas / der Tabelle an. Sie können diese Ausgabe dann irgendwie in Ihr C # -Programm einspeisen. - Sven♦
Sehen Sie sich die information_schema-Ansichten an: postgresql.org/docs/9.0/interactive/information-schema.html - alvosu
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 sch zwischen 100 sch 100 sch 100 100 100 100 100 sch sch sch 100 100 100 100 100 100 100 100 100 100 100 100 sch 100 sch 100 100 100 100 100 sch 100 sch 100 100 100 100 100 100 sch 100 sch 100 100 100 100 sch 100 sch 100 100 100 100 100 sch 100 100 100 100 100 sch 100 100 100 100 sch 100 100 100 100 sch 100 100 100 100 100 100 sch 100 100 100 100 sch 100 100 sch zwischen zwischen 100 100 100 dieser Das Problem ist, dass der Benutzer, wenn er es vorzieht, jede Tabelle in der ausgewählten Datenbank synchronisieren und dann die ausgewählte Tabelle auf einem entfernten Server hinter einem WCF-Dienst erstellen kann. Ich kann das mit mssql tun und jetzt möchte ich das Client-Programm zu anderen SQL-Servern (mysql, Oracle, Postgresql, ...) erweitern, OK, kann ich pg_dump für eine Tabelle, die der Benutzer synchronisieren möchte, aber wenn es ist überhaupt möglich, nur in plsql zu tun, ich möchte es in plsql tun - vlebar
Wenn Sie nach .tar, Packe die restore.sql Datei aus dem Archiv. Es hat alle create-Anweisungen. - Joseph Lust


In der Befehlszeile (psql) Du kannst rennen: \d <table name> um alle Spalten, ihre Typen und Indizes aufzulisten.


9
2017-09-25 18:58



Dies ist hilfreich, beantwortet die Frage jedoch nicht. - Ryan Tuck


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 antworten mit dem, was mir einfiel.

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.


4
2018-05-23 02:43





Wie beantwortet in https://serverfault.com/a/875414/333439, mit dem \d <table> Meta-Befehl in psql Es ist möglich, die Tabellenstruktur in der Datenbank anzuzeigen. Sch sch 100 sch dieser 100 100 100 100 sch 100 sch 100 sch 100 sch 100 sch 100 sch 100 sch 100 sch 100 sch sch sch sch sch sch sch zwischen 100 sch sch sch sch sch dieser 100 sch sch 100 100 sch dieser 100 sch sch 100 sch dieser 100 sch sch 100 sch sch sch 100 100 100 100 100 100 sch sch sch 100 sch 100 sch sch sch dieser sch sch sch 100 sch sch sch 100 sch sch dieser sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch 100 sch sch sch sch sch sch sch dieser sch sch dieser dieser sch dieser psql -E. Wie in der Manpage beschrieben, wird die -E Schalter echos der \d Meta-Befehle Abfragen. Also, Sie können starten psql -E, können Sie die Tabellenstruktur mit anzeigen \d <table> Meta-Befehl, und nach -E wechseln, können Sie die generierte Abfrage anzeigen, um die Tabellenstruktur zu beschreiben


2
2017-07-31 10:28





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 Constraints, Indizes und benutzerdefinierte Datentypen usw. weg). Dieser 100 100 100 sch 100 sch 100 100 100 100 100 100 100 100 100 100 sch 100 sch 100 sch 100 sch 100 sch sch sch sch sch 100 oder sch sch 100 100 sch sch 100 100 100 sch 100 sch sch sch 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 sch sch sch 100 sch 100 sch 100 sch 100 sch 100 sch sch dieser sch sch sch sch sch sch 100 sch 100 100 sch sch sch 100 sch 100 dieser 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;

1
2017-09-04 07:29