PostgreSQL 元数据库讲解 - 对象(表、索引、函数、序列、视图…)在哪里、如何识别、如何求对象定义
背景
PostgreSQL中,所有对象的定义都在元数据库中,详见
https://www.postgresql.org/docs/10/static/catalogs.html
除了元数据库,还有一些管理函数,如下
https://www.postgresql.org/docs/10/static/functions-admin.html
下面简单介绍一下元数据库的使用。
如何识别对象
1、识别临时表、UNLOGGED TABLE、临时表
select relname from pg_class where relpersistence=? and relkind='r';
pg_class 的relpersistence用于识别表是什么表(正常表、不记日志表、临时表)。 relkind用于识别是什么对象类别(表、索引、序列、切片、视图、物化视图、复合类型、外部表、分区表)。
relpersistence
p = permanent table, u = unlogged table, t = temporary table
relkind
r = ordinary table, i = index, S = sequence, t = TOAST table, v = view, m = materialized view, c = composite type, f = foreign table, p = partitioned table
Greenplum 扩展
pg_class.relstorage 用于区分是什么存储
h = 堆表(heap)
a = append only row存储表
c = append only column存储表
存储过程
pg_proc
数据库
pg_database
表空间
pg_tablespace
schema
pg_namespace
用户
pg_roles
索引接口
pg_am
如何获取对象定义
使用这些函数接口,可以获得对应对象的定义。
pg_get_indexdef
pg_get_functiondef
pg_get_triggerdef
pg_get_ruledef
pg_get_viewdef
pg_get_constraintdef
例子
postgres=# select * from pg_get_indexdef('idx_tbl2_1'::regclass);
pg_get_indexdef
--------------------------------------------------
CREATE INDEX idx_tbl2_1 ON tbl2 USING btree (id)
(1 row)
参考
https://www.postgresql.org/docs/10/static/catalogs.html
https://www.postgresql.org/docs/10/static/functions-admin.html