如果 psql 不理解,为什么 pg_dump 包含“transaction_timeout”?

问题描述 投票:0回答:1

我正在运行 PostgreSQL 15.7(在 Docker 中)并在 Ubuntu 22.04 上与

psql
pg_dump
17.0 连接。

我有两个数据库:

  • db1 包含我的应用程序架构
  • db2 为空(新创建)

我运行

pg_dump
来转储 db1 的架构:

pg_dump --schema-only 'postgresql://.../db1' > schema.sql

然后我运行

psql
db2
上运行结果,因此最终会得到相同的模式:

psql 'postgresql://.../db2' < schema.sql

并收到此错误:

ERROR:  unrecognized configuration parameter "transaction_timeout"

第 11 行结果:

SET transaction_timeout = 0;

为什么? 为什么

pg_dump
会转储
psql
或 postgres 无法识别的语句? 我怎样才能首先禁止所有这些“SET”语句包含在我的 SQL 文件中?

(我想要的只是表、索引、约束和视图。)

postgresql psql pg-dump
1个回答
0
投票

“因为 pg_dump 用于将数据传输到较新版本的 PostgreSQL,所以 pg_dump 的输出预计会加载到比 pg_dump 版本更新的 PostgreSQL 服务器版本中。pg_dump 还可以从比其自身版本更旧的 PostgreSQL 服务器转储。(目前,服务器支持回到版本 9.2。)但是,pg_dump 无法从比其自己的主要版本更新的 PostgreSQL 服务器转储;它甚至会拒绝尝试,而不是冒险进行无效转储。加载到较旧主要版本的服务器中 - 即使转储是从该版本的服务器中获取的。将转储文件加载到较旧的服务器中可能需要手动编辑转储文件以删除转储文件不理解的语法较旧的服务器。”

来自

pg_dump 文档的 Notes 部分。 (感谢@Adrian Klaver 向我指出。)

PS - 强调我的。

PPS - 这对我来说似乎是糟糕的设计,这就是为什么我发现它如此令人惊讶并且需要明确的确认。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.