pg_extension_config_dump()
是一个系统函数,用于将 扩展 表或序列标记为“配置关系”,可以通过 pg_dump
转储。
pg_extension_config_dump()
在 PostgreSQL 9.1 中添加。
用法
pg_extension_config_dump (regclass
,text
) →void
默认情况下,pg_dump 不会转储作为扩展的一部分创建的表的內容。但是,如果某个表旨在包含用户可配置的数据,则可能希望能够转储该表的內容和任何关联的序列。可以在 CREATE EXTENSION 执行的 SQL 脚本中调用 pg_extension_config_dump()
来标记任何需要标记的对象。请注意,它不能直接执行。
pg_extension_config_dump()
接受两个参数
- 要标记为“配置关系”的表或序列的名称
- 对于表,可选字符串包含
WHERE
子句以限制要转储的数据
截至 PostgreSQL 15,此函数未使用任何 contrib 模块。用法示例可以在第三方扩展中找到,例如
注意事项
- 任何
WHERE
子句都按原样存储,并且在创建或更新扩展时不会进行评估。 - 没有相应的 SQL 函数可以取消将表或序列标记为“配置关系”。
- 它只能从扩展 SQL 脚本中执行。
实现
标记为“配置关系”的对象的 oid 写入 pg_extension 中的 extconfig
列。任何 WHERE
子句都存储在 extcondition
列中(请参见下面的示例)。
如上所述,没有相应的 SQL 函数可以取消将表或序列标记为“配置关系”,但是此文件包含内部函数 extension_config_remove()
,如果必要,它由 ALTER EXTENSION ... DROP
调用。
来源
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 文档: 扩展配置表