pg_extension_config_dump() 是一个系统函数,用于将一个扩展表或序列标记为“配置关系”,这样它就可以被pg_dump转储。
pg_extension_config_dump() 是在PostgreSQL 9.1中添加的。
用法
pg_extension_config_dump (regclass,text) →void
默认情况下,pg_dump 不会转储作为扩展一部分创建的表的內容。但是,如果一个表旨在包含用户可配置的数据,则可能希望能够转储该表及其任何相关序列的內容。pg_extension_config_dump() 可以在由CREATE EXTENSION执行的 SQL 脚本中调用,以标记任何需要被标记为这样的对象。请注意,它不能直接执行。
pg_extension_config_dump() 接受两个参数:
- 要被标记为“配置关系”的表或序列的名称
- 对于表,是一个可选的字符串,其中包含一个
WHERE子句,用于限制要转储的数据
截至PostgreSQL 15,此函数未被任何 contrib 模块使用。用法的示例可以在第三方扩展中找到,例如:
注意事项
- 任何
WHERE子句都将按原样存储,并且在创建或更新扩展时不会进行评估。 - 没有相应的 SQL 函数可以取消标记表或序列的“配置关系”属性。
- 它只能从扩展 SQL 脚本中执行。
实现
被标记为“配置关系”的对象的 oid 将写入 pg_extension 中的 extconfig 列。任何 WHERE 子句都存储在 extcondition 列中(见下面的示例)。
如上所述,没有相应的 SQL 函数可以取消标记表或序列的“配置关系”属性。但是,此文件包含内部函数 extension_config_remove(),如果需要,它将由 ALTER EXTENSION ... DROP 调用。
Source
pg_extension_config_dump() 实现于 src/backend/commands/extension.c。
变更历史
- PostgreSQL 9.1
- 添加(提交 d9572c4e)
示例
以一个包含两个配置表 base_config 和 extra_config 的简单测试扩展为例:
postgres=# \dx+ configuration_relation
Objects in extension "configuration_relation"
Object description
------------------------------
function function_template()
table base_config
table extra_config
(3 rows)
在扩展的 SQL 文件中,表定义如下:
CREATE TABLE base_config (
id INT,
val TEXT
);
SELECT pg_catalog.pg_extension_config_dump('base_config', '');
CREATE TABLE extra_config (
id INT,
val TEXT,
is_ext BOOL NOT NULL DEFAULT TRUE
);
SELECT pg_catalog.pg_extension_config_dump('extra_config', 'WHERE is_ext IS FALSE');
并且配置关系定义如下存储在 pg_extension 中:
postgres=# SELECT * FROM pg_extension WHERE extname='configuration_relation'\x\g\x
Expanded display is on.
-[ RECORD 1 ]--+-----------------------------
oid | 24578
extname | configuration_relation
extowner | 10
extnamespace | 2200
extrelocatable | t
extversion | 0.1
extconfig | {24580,24586}
extcondition | {"","WHERE is_ext IS FALSE"}
pg_extension_config_dump() 通常不能被执行
postgres=# SELECT pg_catalog.pg_extension_config_dump('extra_config', 'WHERE is_ext IS FALSE');
ERROR: pg_extension_config_dump() can only be called from an SQL script executed by CREATE EXTENSION
参考资料
- PostgreSQL documentation: Extension Configuration Tables
