跳转至

ddlx扩展组件

ddlx扩展组件

SeaboxMPP数据库提供一个DDLX扩展组件,通过该组件用户可通过函数调用的方式获取数据库对象的创建、删除语句。

组件安装

ddlx扩展组件在初始化数据库时会自动安装,无需再手动安装。

组件使用

ddlx定义了大量函数,通过这些函数对系统表进行查询并获取所需元数据信息。

主要函数包括:ddlx_identify()ddlx_describe()ddlx_create_table()ddlx_create_class()ddlx_create()等。

常见函数说明及示例如下:

  • ddlx_identify()
功能描述
获取任意数据库对象的基本信息。
输入参数
数据库对象的oid。
输出内容

以下是输出数据各个字段的含义。

classid
对象类型,如pg_class、pg_proc、pg_type等。
name
对象名称,如表面、函数名。
namespace
对象所在namespace。
owner
对象所属owner。
sql_kind
对象类型关键字,如table、function。
sql_identifier
对象名称。
acl
访问控制列表信息。
查询系统表
所有object class系统表,如pg_class、pg_proc、pg_type、pg_roles、pg_namespace、pg_attrdef、pg_operator、pg_foreign_data_wrapper等
使用示例

获取当前database下public.t表基本信息语句如下:

mytest=# select ddlx_identify('t'::regclass);
                                          ddlx_identify                                                
----------------------------------------------------------------
 (16385,pg_class,t,public,hellboy,TABLE,t,"{hellboy=arwdDxt/      hellboy,user1=arwdDxt/hellboy,user2=a/hellboy}")
(1 row)
  • ddlx_describe()
功能描述
获取表的详细列信息
输入参数
表的oid
输出内容

以下是输出数据各个字段的含义。

ord
列编号,pg_attribute.attnum
name
列名
type
列类型,如integer
size
列长度
not_null
是否允许为空
"default"
默认值
ident
生成列信息
gen
comment
comment信息
primary_key
primary key信息
is_local
是否为local(还是继承)
storage
存储类型(plain、main、external、extended)
collation
本地化信息
namespace
所属namespace信息
class_name
表名
sql_identifier
表名.列名
relid
表oid
options
列属性(attoptions||attfdwoptions)
definition
列定义字符创(a int)
sequence
列的sequence信息
查询系统表
pg_class、pg_namespace、pg_attribute、pg_attrdef、pg_constraint、pg_type、pg_collation、pg_depend
使用示例

获取当前database下public.t表基本信息语句如下:

mytest=# create table t(
a int primary key,
b text not null default 'hello');
CREATE TABLE
mytest=# 
mytest=# select ddlx_describe('t'::regclass);
                               ddlx_describe                                      
-----------------------------------------------------------
 (1,a,integer,,t,,,,,t_pkey,t,,,public,t,t.a,16561,,"a    integer     NOT NULL",)
 (2,b,text,,t,'hello'::text,,,,,t,,,public,t,t.b,16561,,"b   text     NOT NULL",)
(2 rows)
  • ddlx_create_table()
功能描述
获取表的创建信息,注:返回信息并不包含约束信息。
输入参数
表的oid
输出内容
文本格式的建表语句
查询系统表
pg_class、pg_foreign_table、pg_foreign_server、pg_partitioned_table
使用示例

获取当前database下public.t表创建语句如下:

mytest=# select ddlx_create_table('t'::regclass);
ddlx_create_table    
-------------------------
 CREATE TABLE t (       +
     a integer NOT NULL,+
     b text NOT NULL    +
 );                     +
 
(1 row)
  • ddlx_create_class()
功能描述
获取class类型对象的创建信息,包括表、视图、索引、sequence。
输入参数
class的oid
输出内容
文本格式的创建语句
查询系统表
根据不同的类型,调用相应的函数处理
使用示例

获取不同对象的创建语句如下:

mytest=# create index t_idx on t(b);
mytest=# select ddlx_create_class('t_idx'::regclass);
                ddlx_create_class                
-------------------------------------------------
 -- Type: INDEX ; Name: t_idx; Owner: hellboy   +
                                                +
 CREATE INDEX t_idx ON public.t USING btree (b);+
                                                +
 COMMENT ON INDEX t_idx IS NULL;                +
                                                +
 
(1 row)

mytest=# create view t_view as select * from t;
mytest=# select ddlx_create_class('t_view'::regclass);
              ddlx_create_class               
----------------------------------------------
 -- Type: VIEW ; Name: t_view; Owner: hellboy+
                                             +
 CREATE OR REPLACE VIEW t_view AS            +
  SELECT t.a,                                +
     t.b                                     +
    FROM t;                                  +
                                             +
 COMMENT ON VIEW t_view IS NULL;             +
                                             +
(1 row)

      
  • ddlx_create()
功能描述
获取数据库对象创建信息的统一入口。
输入参数
对象oid
输出内容
文本格式的创建语句
查询系统表
根据oject class,进入到相应的重载函数或其它处理函数。比如:ddlx_create(oid::regclass)、ddlx_create(oid::regproc)、ddlx_create_rule(oid)。
使用示例

获取不同对象的创建语句如下:

mytest=# select ddlx_create('t'::regclass);
               ddlx_create                    
--------------------------------------------------
 -- Type: TABLE ; Name: t; Owner: hellboy        +
                                                 +
 CREATE TABLE t (                                +
     a integer NOT NULL,                         +
     b text NOT NULL                             +
 );                                              +
                                                 +
 COMMENT ON TABLE t IS NULL;                     +
 ALTER TABLE t OWNER TO hellboy;                 +
                                                 +
 ALTER TABLE t ALTER b SET DEFAULT 'hello'::text;+
                                                 +
 ALTER TABLE t ADD CONSTRAINT t_pkey             +
   PRIMARY KEY (a);                              +
                                                 +
 CREATE INDEX t_idx ON public.t USING btree (b); +
                                                 +
 
(1 row)