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)