在 PostgreSQL 12 中是不是有内置函数或简单的方法来获取表的 DDL?

Posted

技术标签:

【中文标题】在 PostgreSQL 12 中是不是有内置函数或简单的方法来获取表的 DDL?【英文标题】:Is there a build-in function or a simple way to get DDL of a table in PostgreSQL 12?在 PostgreSQL 12 中是否有内置函数或简单的方法来获取表的 DDL? 【发布时间】:2019-10-23 13:41:15 【问题描述】:

我想在 PostgreSQL 中获取一个表的 DDL,如下所示:

CREATE TABLE public.person (
    id serial NOT NULL,
    "name" varchar(50) NOT NULL,
    age int4 NOT NULL,
    CONSTRAINT person_name_uk UNIQUE (name),
    CONSTRAINT person_pkey PRIMARY KEY (id)
);

我记得,在 mysql 中有一个查询 SHOW CREATE TABLE。在 PostgreSQL 中是否有类似的方法来获得相同的结果?

我对 PostgreSQL 12 版本的解决方案感兴趣。

我需要一个完全在 SQL 中的解决方案,所以我可以在 SQL 函数内部使用。因此\d+pg_dump 不适合。

【问题讨论】:

【参考方案1】:

使用pg_dump:

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

仅供参考

-s or --schema-only : Dump only ddl without data.
-t or --table Dump :  Dump only tables

您可以尝试在PostgreSQL 日志文件中跟踪pg_dump 的实际操作。您可以使用相同的策略。

【讨论】:

感谢您的回答。但是我需要一个完全针对 SQL 的解决方案,而不是借助终端中的特殊实用程序。我将编辑我的问题。 那么 pg_dump 使用的转储策略可能有助于识别。【参考方案2】:

一个地方是 information_schema 列视图:

https://www.postgresql.org/docs/current/infoschema-columns.html

您可能会发现此线程相关:

How to generate the "create table" sql statement for an existing table in postgreSQL

无数的客户端工具可以为您编写CREATE TABLE 脚本。除了检查 pg_dump 本身的极好建议之外,这是另一个查找相关脚本的地方。

【讨论】:

以上是关于在 PostgreSQL 12 中是不是有内置函数或简单的方法来获取表的 DDL?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL之SQL函数介绍及实践

PostgreSQL中的函数中是不是有命名参数的约定

PostgreSQL 常用函数

PostgreSQL 常用函数

PostgreSQL 函数中的 psql 变量是不是有任何转义语法?

如何查找 PostgreSQL 中是不是存在函数?