暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL 获取对象 DDL 插件 ddlx or pg_dbms_metadata

原创 黄山谷 2025-06-17
110

1、ddlx

https://pgxn.org/dist/ddlx/

image.png

unzip ddlx-0.29.0.zip -d /home/postgres/
cd /home/postgres/
[postgres@pg16 ~]$ cd ddlx-0.29.0/
make
make install

image.png

postgres=# create extension ddlx ;
CREATE EXTENSION

image.png

emp=# select ddlx_create('jobs'::regclass);

image.png

2、pg_dbms_metadata

github地址:
https://github.com/hexacluster/pg_dbms_metadata/releases

pg_dbms_metadata v1.0.0 发布
发布于 2024-01-05,作者:HexaCluster

PostgreSQL pg_dbms_metadata 扩展
这是一个 PostgreSQL 扩展,用于以与 Oracle DBMS_METADATA 包兼容的方式提取数据库对象的 DDL。
此扩展建立了一种系统的方法,以编程方式检索对象的 DDL。
现在,您可以灵活地从纯 SQL 查询或 PL/pgSQL 代码生成对象的 DDL。
实现了以下函数和存储过程
● GET_DDL() 此函数提取指定对象的 DDL。
● GET_DEPENDENT_DDL() 此函数提取指定基本对象的所有指定类型依赖对象的 DDL。
● GET_GRANTED_DDL() 此函数提取用于为指定被授权者重新创建授权权限和角色的 SQL 语句。
● SET_TRANSFORM_PARAM() 此过程用于通过配置会话级转换参数来自定义 DDL。

链接
下载 https://github.com/hexacluster/pg_dbms_metadata/releases
支持 https://github.com/hexacluster/pg_dbms_metadata/issues
文档 https://github.com/hexacluster/pg_dbms_metadata#readme

[postgres@pg16 soft]$ tar -zxvf pg_dbms_metadata-1.0.0.tar.gz -C /home/postgres/
[postgres@pg16 ~]$ cd pg_dbms_metadata-1.0.0/
[postgres@pg16 pg_dbms_metadata-1.0.0]$ make install   --直接安装即可

image.png

Test of the extension can be done using below command. Before running the tests, ensure that your PostgreSQL service is running:

sudo make installcheck

image.png
Note: If you don’t want to create an extension for this, you can simply import the SQL file and use the complete functionality:

psql -d mydb -c "CREATE SCHEMA dbms_metadata;"
psql -d mydb -f sql/pg_dbms_metadata--1.0.0.sql
--------------------------------------------------
psql -d emp -c "CREATE SCHEMA dbms_metadata;"
psql -d emp -f sql/pg_dbms_metadata--1.0.0.sql

Manage the extension
Each database that needs to use pg_dbms_metadata must creates the extension:

psql -d emp -c "CREATE EXTENSION pg_dbms_metadata"

To upgrade to a new version execute:

psql -d emp -c 'ALTER EXTENSION pg_dbms_metadata UPDATE TO "1.1.0"'

Functions

GET_DDL
This function extracts DDL of database objects.
Below is list of currently supported object types. To get a ddl of a check constraint, unlike Oracle you need to use CHECK_CONSTRAINT object type. In Oracle, we will use the CONSTRAINT object type to get ddl of a check constraint.
● TABLE
● VIEW
● SEQUENCE
● PROCEDURE
● FUNCTION
● TRIGGER
● INDEX
● CONSTRAINT
● CHECK_CONSTRAINT
● REF_CONSTRAINT
● TYPE

Syntax:

dbms_metadata.get_ddl (
   object_type      IN text,
   name             IN text,
   schema           IN text DEFAULT NULL)
   RETURNS text;

示例,看下效果,也还行。

psql -d emp -c 'SELECT dbms_metadata.get_ddl('TABLE','employees','emp');'

image.png

以下是 kingbase 自己兼容Oracle的 dbms_metadata,看下效果,显示好像接近于ddlx,金昌的这个功能也是很强大的

image.png
image.png

文章有误大家批评指正

最后修改时间:2025-07-03 14:25:02
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论