Windows和Linux的postgres转储有何不同?

时间:2018-02-12 05:44:40

标签: linux windows postgresql dump

我有一个带有序列的postgres数据库。当我从运行Windows的开发机器上转储它时,会生成以下内容

CREATE SEQUENCE "some_sequence"
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

但是,如果我尝试在Linux计算机上恢复它,则会抛出错误,指出行AS integer无效,但在删除该行时按预期工作。 linux机器运行的是v9.5.11,而windows上的机器是postgres 10。

这是否与不同的操作系统有关,或者我做错了什么?

2 个答案:

答案 0 :(得分:3)

https://www.postgresql.org/docs/devel/static/release-10.html

  

添加CREATE SEQUENCE AS命令以创建匹配的序列   整数数据类型

因此它是第10版中的新语法,显然9.5不会理解它。

https://www.postgresql.org/docs/current/static/app-pgdump.html

  

因为 pg_dump用于将数据传输到较新版本的PostgreSQL,所以   pg_dump的输出可以加载到PostgreSQL服务器中   版本比pg_dump的版本更新。 pg_dump也可以从中转储   PostgreSQL服务器比其自己的版本更早。 (目前,服务器   支持返回到8.0版。)但是,pg_dump无法从中转储   PostgreSQL服务器比其自己的主要版本更新;它会拒绝   甚至尝试,而不是冒险进行无效转储。而且,事实并非如此   保证pg_dump的输出可以加载到服务器中   较旧的主要版本 - 即使转储是从服务器获取的   那个版本。可能需要将转储文件加载到较旧的服务器中   手动编辑转储文件以删除不理解的语法   旧服务器。建议使用--quote-all-identifiers选项   在跨版本的情况下,因为它可以防止出现问题   在不同的PostgreSQL版本中改变保留字列表。

因此,如果您执行相反操作,它将起作用 - 转储9.5并将其恢复为10,但反之亦然。

答案 1 :(得分:1)

事实证明,这毕竟是版本冲突(在我写完问题之前我没有检查过版本)。将linux机器上的postgres更新到10.2解决了这个问题。