Existe-t-il un équivalent de MySQL SHOW CREATE TABLE
dans Postgres? Est-ce possible? Si non, quelle est la meilleure solution?
J'ai besoin de cette déclaration car je l'utilise pour créer la table sur un serveur distant (via WCF).
Existe-t-il un équivalent de MySQL SHOW CREATE TABLE
dans Postgres? Est-ce possible? Si non, quelle est la meilleure solution?
J'ai besoin de cette déclaration car je l'utilise pour créer la table sur un serveur distant (via WCF).
Réponses:
Vous pouvez essayer de tracer dans le fichier journal PostgreSQL ce que fait réellement "pg_dump -t table -s". Ensuite, vous pouvez utiliser la même méthode pour écrire votre propre fonction SQL.
pg_dump:
pg_dump -st tablename dbname
ou utilisez les outils de l’interface graphique de PostgreSQL (pgAdmin, phpPgAdmin, etc.)
--schema-only
a exactement cet objectif: Afficher les instructions SQL pour créer le schéma / la table. Vous pouvez ensuite alimenter cette sortie dans votre programme C #.
.tar
, récupérez le restore.sql
fichier de l'archive. Il a toutes les déclarations de création.
En ligne de commande ( psql
), vous pouvez exécuter: \d <table name>
pour répertorier toutes les colonnes, leurs types et leurs index.
En vous appuyant sur la première partie de la réponse de @ CubicalSoft, vous pouvez ajouter la fonction suivante, qui devrait fonctionner pour des tables simples (suppose le schéma par défaut "public" et omet les contraintes, les index et les types de données définis par l'utilisateur, etc.). @RJS answer est le seul moyen de le faire correctement pour le moment; c'est quelque chose qui devrait être intégré à 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;
Je me rends compte que je suis un peu en retard pour cette soirée, mais comme c'était le premier résultat de ma recherche sur Google, je me suis dit que je répondrais avec ce que j'ai proposé.
Vous pouvez aller assez loin vers une solution avec cette requête pour obtenir les colonnes:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
Et puis cette requête pour les index les plus courants:
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
Ensuite, il suffit de construire la ou les chaînes de requête dans le bon format.
Comme indiqué dans https://serverfault.com/a/875414/333439 , il est possible d'afficher la structure de la table dans la base de données avec la \d <table>
méta-commande in psql
. Si vous souhaitez afficher la requête utilisée dans la méta-commande, vous pouvez utiliser la commande psql -E
. Comme décrit dans la page de manuel, le -E
commutateur renvoie les \d
requêtes de méta-commandes. Donc, vous pouvez lancer psql -E
, vous pouvez afficher la structure de la table avec la \d <table>
méta-commande, et, en fonction du -E
commutateur, vous pouvez afficher la requête générée pour décrire la structure de la table
Dans pgAdmin 4 , trouvez simplement la table dans l'arborescence à gauche, par exemple:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Lorsque la table est sélectionnée, ouvrez l' onglet SQL à droite. Il affiche le CREATE TABLE
pour la table sélectionnée.
Postgres extension ddlx ( https://github.com/lacanoid/pgddl ) fait exactement cela, et plus encore.