pg_extension_config_dump()

用于将扩展表或序列标记为可转储的系统函数

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 中实现。

更改历史记录

示例

以包含两个配置表 base_configextra_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

分类

数据导入/导出扩展

另请参见

扩展pg_extension

反馈

提交任何关于“pg_extension_config_dump()”的评论、建议或更正 此处