我有一个带有序列的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。
这是否与不同的操作系统有关,或者我做错了什么?
答案 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解决了这个问题。