在Postgresql上以编程方式生成DDL

时间:2009-12-10 23:10:48

标签: postgresql ddl

如何在Postgresql上以编程方式生成表的DDL?是否有系统查询或命令来执行此操作?谷歌搜索问题没有回应。

6 个答案:

答案 0 :(得分:32)

pg_dump与此选项一起使用:

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

说明

-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

示例:

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

如果不在话题,请抱歉。只想帮助谁搜索“psql dump ddl”并重定向到此线程。

答案 1 :(得分:19)

您可以使用pg_dump命令转储数据库的内容(架构和数据)。 --schema-only开关将仅转储表的DDL。

答案 2 :(得分:3)

答案是检查pg_dump的源代码,并按照它用来生成DDL的开关。在代码中的某处,有许多查询用于检索用于生成DDL的元数据。

答案 3 :(得分:3)

为什么炮轰出psql不算“编程”?它会非常好地转储整个模式。

无论如何,您可以从information_schema获取数据类型(以及更多内容)(此处引用的是8.4文档,但这不是新功能):

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

答案 4 :(得分:2)

这是一篇关于如何从信息模式中获取元信息的好文章, http://www.alberton.info/postgresql_meta_info.html

答案 5 :(得分:2)

saved 4 functions部分模拟pg_dump -s行为。基于\d+ metacommand。使用情况类似:

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

当然你必须事先创建函数。

Working sample here at rextester