Comment puis-je générer le DDL d'une table par programme sur Postgresql? Existe-t-il une requête ou une commande système pour le faire? Googler le problème n'a renvoyé aucun pointeur.
La réponse est de vérifier le code source de pg_dump et de suivre les commutateurs qu'il utilise pour générer le DDL. Quelque part dans le code, il existe un certain nombre de requêtes utilisées pour récupérer les métadonnées utilisées pour générer la DDL.
Utilisation pg_dump
avec ces options:
pg_dump -U user_name -h Host database -s -t table_or_view_names -f table_or_view_names.sql
La description:
-s or --schema-only : Dump only ddl / the object definitions (schema), without data.
-t or --table Dump : Dump only tables (or views or sequences) matching table
Exemples:
-- dump each ddl table that elon build.
$ pg_dump -U elon -h localhost -s -t spacex -t tesla -t solarcity -t boring > companies.sql
Désolé si hors sujet. Je veux juste aider qui googler "psql dump ddl" et redirigé vers ce fil.
Vous pouvez utiliser le pg_dump
commande pour vider le contenu de la base de données (schéma et données). Le --schema-only
switch ne videra que le DDL pour vos tables.
Pourquoi le décorticage sur psql ne compterait-il pas comme "par programme"? Cela videra très bien l'ensemble du schéma.
Quoi qu'il en soit, vous pouvez obtenir des types de données (et bien plus) à partir du information_schema (8.4 documents référencés ici, mais ce n'est pas une nouvelle fonctionnalité):
=# select column_name, data_type from information_schema.columns
-# where table_name = 'config';
column_name | data_type
--------------------+-----------
id | integer
default_printer_id | integer
master_Host_enable | boolean
(3 rows)
I enregistré 4 fonctions pour maquiller pg_dump -s
comportement partiellement. Basé sur \d+
métacommande. L'utilisation serait similaire:
\pset format unaligned
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';
Bien sûr, vous devez créer des fonctions au préalable.
Voici un bon article sur la façon d'obtenir les méta-informations de information_schema, http://www.alberton.info/postgresql_meta_info.html .