开发者

Generate DDL programmatically on Postgresql

开发者 https://www.devze.com 2022-12-13 22:25 出处:网络
How can I generate the DDL of a table programmatically on Postgresql? Is there a system query or command to do it? Googling the issue returned 开发者_开发知识库no pointers.Use pg_dump with this option

How can I generate the DDL of a table programmatically on Postgresql? Is there a system query or command to do it? Googling the issue returned 开发者_开发知识库no pointers.


Use pg_dump with this options:

pg_dump -U user_name -h host database -s -t table_or_view_names -f table_or_view_names.sql

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

Examples:

-- dump each ddl table elon build.
$ pg_dump -U elon -h localhost -s -t spacex -t tesla -t solarcity -t boring > companies.sql

Sorry if out of topic. Just wanna help who googling "psql dump ddl" and got this thread.


You can use the pg_dump command to dump the contents of the database (both schema and data). The --schema-only switch will dump only the DDL for your table(s).


Why would shelling out to psql not count as "programmatically?" It'll dump the entire schema very nicely.

Anyhow, you can get data types (and much more) from the information_schema (8.4 docs referenced here, but this is not a new feature):

=# 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)


The answer is to check the source code for pg_dump and follow the switches it uses to generate the DDL. Somewhere inside the code there's a number of queries used to retrieve the metadata used to generate the DDL.


Here is a good article on how to get the meta information from information schema, http://www.alberton.info/postgresql_meta_info.html.


I saved 4 functions to mock up pg_dump -s behaviour partially. Based on \d+ metacommand. The usage would be smth alike:

\pset format unaligned
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';

Of course you have to create functions prior.

Working sample here at rextester

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号