如何在Postgresql上以编程方式生成表的DDL?是否有系统查询或命令来执行此操作?在Google上搜索该问题,没有返回任何指针。
blmhpbnm1#
将pg_dump与以下选项一起使用:
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 elon build. $ pg_dump -U elon -h localhost -s -t spacex -t tesla -t solarcity -t boring > companies.sql
对不起,如果离题了。只是想帮助谁谷歌“psql转储ddl”,并得到了这个线程。
rxztt3cl2#
您可以使用pg_dump命令转储数据库的内容(模式和数据)。--schema-only开关将仅转储表的DDL。
--schema-only
1zmg4dgp3#
为什么把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)
bnl4lu3b4#
答案是检查pg_dump的源代码,并遵循它用于生成DDL的开关。在代码中的某个地方,有许多查询用于检索用于生成DDL的元数据。
nr9pn0ug5#
这里有一篇关于如何从信息模式http://www.alberton.info/postgresql_meta_info.html中获取 meta信息的好文章。
ekqde3dh6#
我saved 4 functions部分模拟pg_dump -s行为。基于\d+元命令。用法类似:
pg_dump -s
\d+
\pset format unaligned select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';
当然,你必须先创建函数。Working sample here at rextester
6条答案
按热度按时间blmhpbnm1#
将
pg_dump
与以下选项一起使用:说明:
示例:
对不起,如果离题了。只是想帮助谁谷歌“psql转储ddl”,并得到了这个线程。
rxztt3cl2#
您可以使用
pg_dump
命令转储数据库的内容(模式和数据)。--schema-only
开关将仅转储表的DDL。1zmg4dgp3#
为什么把psql打包不算“程序化”呢?它会很好地转储整个模式。
无论如何,你可以从information_schema(这里引用了8.4文档,但这不是一个新功能)获得数据类型(以及更多):
bnl4lu3b4#
答案是检查pg_dump的源代码,并遵循它用于生成DDL的开关。在代码中的某个地方,有许多查询用于检索用于生成DDL的元数据。
nr9pn0ug5#
这里有一篇关于如何从信息模式http://www.alberton.info/postgresql_meta_info.html中获取 meta信息的好文章。
ekqde3dh6#
我saved 4 functions部分模拟
pg_dump -s
行为。基于\d+
元命令。用法类似:当然,你必须先创建函数。
Working sample here at rextester