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 不会转储作为扩展一部分创建的表的內容。但是,如果一个表旨在包含用户可配置的数据,则可能希望能够转储该表及其任何相关序列的內容。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

变更历史

示例

以一个包含两个配置表 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()”的任何评论、建议或更正请 在此处