跨版本迁移数据报错tables declared WITH OIDS are not supported

瀚高数据库
目录
环境
症状
问题原因
解决方案

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:6.0
症状
迁移数据还原数据库时报错

ERROR:  tables declared WITH OIDS are not supported

问题原因
Postgresql12后取消了OIDS=TRUE的用法。

解决方案
修改脚本中的语句

脚本中出现OIDS=TRUE的情况有两种,一种是

set default_with_oids= true;

这种情况下删除这这行语句即可,也可以无视,新版本默认default_with_oids= true,报错后不会影响数据。

另一种是

create table test(id int,name varchar(100)) with(OIDS=true);

这种sql语句需要将“with(OIDS=true)”从语句中删除。否则的话创建报的操作将失效。

参考资料:

postgresql11的描述:

WITH ( storage_parameter [= value] [, … ] )

这个子句为一个表或索引指定可选的存储参数,详见存储参数。一个表的WITH子句还可以包括OIDS=TRUE(或者只包括OIDS)来指定新表的行应该具有被分配的 OID(对象标识符),或者包括OIDS=FALSE来指定新表的行不具有 OID。如果没有指定OIDS,默认设置取决于default_with_oids配置参数(如果新表是从任何具有 OID 的表继承而来,那么即使该命令要求OIDS=FALSE也会强制使用OIDS=TRUE)。

如果指定或者蕴含了OIDS=FALSE,新表就不会存储 OID 并且对插入其中的一个新行不会分配 OID。这通常值得考虑,因为它将减少 OID 消耗并且因而推迟 32 为 OID 计数器的回卷。一旦计数器回卷,OID 就不再能被假定为唯一,这就使它们不那么有用了。另外,从一个表中排除 OID 可以减少存储该表所需的磁盘空间,减少的量是每行减少 4 字节(在大部分机器上),这也略微提高了性能。

要在表被创建后从中移除 OID,使用ALTER TABLE.

postgresql12的描述:

WITH ( storage_parameter [= value] [, … ] )

这个子句为一个表或索引指定可选的存储参数,详见存储参数 。 为了向后兼容性,表的WITH子句还可以包括OIDS=FALSE以便指定新表的行不应包含 OIDs (对象标识符),OIDS=TRUE不再受支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值