Vraag Is er een MySQL-equivalent van SHOW CREATE TABLE in postgres?


Is er een MySQL-equivalent van SHOW CREATE TABLE in postgres? Is dit mogelijk? Zo niet, wat is de beste oplossing?

Ik heb de verklaring nodig omdat ik deze gebruik om de tabel op een externe server te maken (boven WCF).


47
2018-02-06 21:49


oorsprong




antwoorden:


Je kunt proberen in het PostgreSQL-logbestand te traceren wat "pg_dump -t table -s" echt doet. Vervolgens kun je dezelfde methode gebruiken om je eigen sql-functie te schrijven.


21
2018-02-06 23:29



ok, ik heb getraceerd naar de pg_dump. Maar het was niet zo gemakkelijk, omdat ik mijn eigen functie in C # moest schrijven om de create table statement te schrijven. Maar het was een grote hulp, dus bedankt veeeeerrrryyyy veel. : D - vlebar


pg_dump:

pg_dump -st tablename dbname

of gebruik PostgreSQL GUI Tools (pgAdmin, phpPgAdmin, enz.)


25
2018-02-06 21:52



ik zal proberen het probleem in meer detail uit te leggen. Ik heb de SQL-instructie (selecteer of opgeslagen procedure) nodig, omdat ik de opdracht sql in C # (Npgsql Commando) uitvoer. Dus ik denk dat de pg_dump in dit geval niet de oplossing is. :( - vlebar
Waarom niet? --schema-only heeft dit exacte doel: de SQL-instructies weergeven om het schema / de tabel te maken. Je kunt dan deze uitvoer op de een of andere manier in je C # -programma invoeren. - Sven♦
kijk naar de weergave information_schema: postgresql.org/docs/9.0/interactive/information-schema.html - alvosu
@SvenW: ik zou dat doen als ik een reeks bekende tabellen zou hebben. Het probleem is dat de gebruiker, als hij ervoor kiest om elke tabel in de geselecteerde database te synchroniseren en vervolgens de geselecteerde tabel op een externe server achter een wcf-service te maken. Ik kan dat doen met mssql en nu wil ik het clientprogramma uitbreiden naar andere sql-servers (mysql, oracle, postgresql, ...) OK, ik kan pg_dump doen voor een tabel die de gebruiker wil synchroniseren, maar als het is helemaal mogelijk om dat alleen in plsql te doen, ik wil het in plsql doen - vlebar
Als u dumpt naar .tar, pak de restore.sql bestand uit het archief. Het heeft alle instructies voor het maken. - Joseph Lust


In opdrachtregel (psql) je kan lopen: \d <table name> om alle kolommen, hun typen en indexen te vermelden.


9
2017-09-25 18:58



Dit is handig, maar geeft geen antwoord op de vraag. - Ryan Tuck


Ik realiseer me dat ik een beetje laat ben op dit feest, maar dit was het eerste resultaat van mijn Google-zoekopdracht, dus ik dacht dat ik zou antwoorden met wat ik bedacht.

U kunt met deze query redelijk ver komen aan een oplossing om de kolommen te krijgen:

SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;

En dan deze vraag voor de meest voorkomende indices:

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

Dan is het een kwestie van het uitwerken van de vraagstring (en) in het juiste formaat.


4
2018-05-23 02:43





Zoals beantwoord in https://serverfault.com/a/875414/333439, met de \d <table> meta-commando in psql is mogelijk om de tabelstructuur in de database weer te geven. Als u de query wilt weergeven die in meta-opdracht wordt gebruikt, kunt u de opdracht gebruiken psql -E. Zoals beschreven in de manpage, de -E schakelaar echo's van de \d meta-opdrachten vragen. Dus je kunt starten psql -E, kunt u de tabelstructuur bekijken met \d <table> meta-commando, en, volgens -E schakelen, kunt u de opgevraagde query weergeven voor het beschrijven van de tabelstructuur


2
2017-07-31 10:28





Voortbordurend op het eerste deel van het antwoord van @ CubicalSoft, kunt u de volgende functie gebruiken die voor eenvoudige tabellen zou moeten werken (veronderstelt het standaard 'openbare' schema 'en laat beperkingen, indexen en door de gebruiker gedefinieerde gegevenstypen enz. Enz. Weg). @RJS-antwoord is de enige manier om dit op dit moment goed te doen; dit is iets dat zou moeten worden ingebouwd in 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;

1
2017-09-04 07:29