pg_get_indexdef()
是一个系统函数,用于生成重新创建指定索引所需的 SQL 代码。
pg_get_indexdef()
在 PostgreSQL 6.4 中添加。
用法
pg_get_indexdef (index
oid
[,column
integer
,pretty
boolean
] ) →text
请注意,返回的文本是根据元数据重建的,而不是原始 CREATE INDEX
命令的逐字文本。
更改历史记录
- PostgreSQL 9.3
- 输出始终缩进 (提交 62e66640)
- PostgreSQL 7.4
- 添加了
pretty
选项 (提交 52347b66)
- 添加了
- PostgreSQL 6.4
- 添加 (提交 f93b6974)
示例
假设以下表定义
postgres=# CREATE TABLE foo (id INT PRIMARY KEY); CREATE TABLE postgres=# \d foo Table "public.foo" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- id | integer | | not null | Indexes: "foo_pkey" PRIMARY KEY, btree (id)
pg_get_indexdef()
可以为隐式创建的 foo_pkey
索引生成 CREATE INDEX
命令,如下所示:
postgres=# SELECT pg_get_indexdef('foo_pkey'::regclass); pg_get_indexdef ------------------------------------------------------------- CREATE UNIQUE INDEX foo_pkey ON public.foo USING btree (id) (1 row)
如果 pretty
参数为 TRUE
,则可以创建不太冗长的定义(这需要将 column
参数提供为 0
)
postgres=# SELECT pg_get_indexdef('foo_pkey'::regclass, 0, true); pg_get_indexdef ------------------------------------------------------ CREATE UNIQUE INDEX foo_pkey ON foo USING btree (id) (1 row)
如果指定了 column
参数,则仅返回该位置中匹配列的名称。
postgres=# SELECT pg_get_indexdef('bar_cols'::regclass) ; pg_get_indexdef -------------------------------------------------------------- CREATE INDEX bar_cols ON public.bar USING btree (col1, col2) (1 row) postgres=# SELECT pg_get_indexdef('bar_cols'::regclass, 1, false), pg_get_indexdef('bar_cols'::regclass, 2, true); pg_get_indexdef | pg_get_indexdef -----------------+----------------- col1 | col2 (1 row)
在这种情况下,pretty
参数无效。
如果提供了无效的 column
参数,则返回空字符串。
postgres=# SELECT pg_get_indexdef('bar_cols'::regclass, -1, true); pg_get_indexdef ----------------- (1 row)
参考文献
- PostgreSQL 文档: 系统目录信息函数
另请参阅
pg_get_constraintdef(),pg_get_functiondef(),pg_get_ruledef(),pg_get_statisticsobjdef(),pg_get_triggerdef(),pg_get_viewdef()