pg_get_viewdef()
是一个系统函数,用于生成重新创建指定视图或物化视图所需的 SQL。
pg_get_viewdef()
在 PostgreSQL 6.4 中添加。
用法
pg_get_viewdef ( view oid [, pretty boolean ] ) → text
pg_get_viewdef ( view oid, wrap_column integer ) → text
pg_get_viewdef ( view text [, pretty boolean ] ) → text
请注意,返回的文本是从元数据重建的,而不是原始 CREATE VIEW
或 CREATE MATERIALIZED VIEW
命令的逐字文本。
第三种变体已弃用。
更改历史记录
- PostgreSQL 9.3
- 输出始终缩进 (提交 62e66640)
- PostgreSQL 7.4
- 添加了
pretty
选项 (提交 52347b66)
- 添加了
- PostgreSQL 6.4
- 添加 (提交 15cb32d9)
示例
pg_get_viewdef()
的基本用法示例,以下为视图定义
postgres=# CREATE TABLE foo ( id INT NOT NULL, val TEXT, ts TIMESTAMP WITH TIME ZONE ); CREATE TABLE postgres=# CREATE VIEW bar AS SELECT * FROM foo WHERE ts >= '2022-01-01'; CREATE VIEW
基本形式返回视图定义的详细渲染,就像 pg_dump 输出的那样
postgres=# SELECT pg_get_viewdef('bar'::regclass); pg_get_viewdef ------------------------------------------------------------------------- SELECT foo.id, + foo.val, + foo.ts + FROM foo + WHERE (foo.ts >= '2022-01-01 00:00:00+09'::timestamp with time zone); (1 row)
可选的 pretty
标志会导致更简洁的版本,主要避免嵌套括号
postgres=# SELECT pg_get_viewdef('bar', true); pg_get_viewdef ----------------------------------------------------------------------- SELECT foo.id, + foo.val, + foo.ts + FROM foo + WHERE foo.ts >= '2022-01-01 00:00:00+09'::timestamp with time zone; (1 row)
pg_get_viewdef()
的第二个版本允许提供一个整数值,该值尝试将行合并到提供的数值为止
postgres=# SELECT pg_get_viewdef('bar'::regclass, 30); pg_get_viewdef ----------------------------------------------------------------------- SELECT foo.id, foo.val, + foo.ts + FROM foo + WHERE foo.ts >= '2022-01-01 00:00:00+09'::timestamp with time zone; (1 row) postgres=# SELECT pg_get_viewdef('bar'::regclass, 50); pg_get_viewdef ----------------------------------------------------------------------- SELECT foo.id, foo.val, foo.ts + FROM foo + WHERE foo.ts >= '2022-01-01 00:00:00+09'::timestamp with time zone; (1 row)
参考文献
- PostgreSQL 文档: 系统目录信息函数
另请参阅
pg_get_constraintdef(),pg_get_functiondef(),pg_get_indexdef(),pg_get_ruledef(),pg_get_statisticsobjdef(),pg_get_triggerdef()