获取 postgresql 扩展的转储

Get the dump of postgresql extension

1。是否可以获取 Postgresql 扩展的转储?

例如在文件 ext_name--1.0.0--1.0.1.sql 中:

CREATE TABLE foo(id integer, name text);

在文件 ext_name--1.0.1--1.0.2.sql 中:

ALTER TABLE foo ADD COLUMN city text;

将生成类似于转储中的代码(在文件 ext_name--1.0.2.sql 中):

CREATE TABLE foo(id integer, name text, city text);

pg_dump 通常会忽略扩展对象。我只找到了包含扩展数据的解决方案 (pg_extension_config_dump())。

2。为什么更新脚本不接受

COPY foo(id, name) FROM stdin;

命令。我虽然这会被传递到 psql,但 psql 会 运行 它成功。我是否必须始终编写插入以将数据放入扩展中?

3。有更新脚本包含文件的解决方案吗?

就像通过 \i 命令在纯 psql 中一样。

好的,在使用扩展程序一段时间后:

  1. 是的。您可以从扩展中删除 member_object (https://www.postgresql.org/docs/current/static/sql-alterextension.html) 该对象将像往常一样运行,并由 pg_dump.

  2. 注册
  3. 嗯,是的,没有复制。但是 pg_dump 可以接受参数 --column-inserts 然后现有数据(甚至相当大)可以转换为文本转储中的插入,这正是我所需要的(将现有表转换为扩展安装脚本)。

  4. 我没有找到解决方案,但实际上并不适合我们的需要。将 git 中的函数单独存储以很好地查看代码中的更改是非常好的。我们的解决方案是复制它(首先在一个单独的文件中,第二个在扩展更改脚本中,这样扩展就可以在不检查 git 历史记录的情况下遍历版本)。