Postgresql 如何在12岁以上的postgres版本上自动生成OID
我目前正在将我的团队数据库从postgres 10迁移到postgres 13。我的团队正在设计一个基于java的应用程序,它构建在postgres上,因此我们不想迁移数据库,只需编辑代码,使我们的程序与postgres 13兼容。是否有自动生成OID的命令?这是我们目前的代码,它与postgres 10兼容,但与postgres 13不兼容Postgresql 如何在12岁以上的postgres版本上自动生成OID,postgresql,ddl,Postgresql,Ddl,我目前正在将我的团队数据库从postgres 10迁移到postgres 13。我的团队正在设计一个基于java的应用程序,它构建在postgres上,因此我们不想迁移数据库,只需编辑代码,使我们的程序与postgres 13兼容。是否有自动生成OID的命令?这是我们目前的代码,它与postgres 10兼容,但与postgres 13不兼容 String createTable = "CREATE TABLE IF NOT EXISTS tableorders (&q
String createTable = "CREATE TABLE IF NOT EXISTS tableorders (" +
"tablename TEXT NOT NULL," +
"ordername TEXT NOT NULL," +
"rowIdxTable TEXT, " +
"colIdxTable TEXT, " +
"PRIMARY KEY (tablename, ordername)" +
"UNIQUE (oid))" +
//postgres13 does not support this line
"WITH oids";
") ";
因此,我想做的是找到一种方法,自动为每个节点生成一个在postgres上唯一的标识,并消除oid,它使我们的程序与postgres 13不兼容您应该使用一个名为
oid
的类型为bigint
的标识列,您的程序将像以前一样工作
如果您想要数据库范围内的唯一性,这是最近删除的oid
s没有提供的。这些数字取自一个4字节的无符号计数器,该计数器在2^32后环绕(尽管PostgreSQL避免了在一个表中出现重复的数字,如果该列有唯一的索引)
通过使用单个序列为所有此类列提供值,可以轻松实现
oid
列在数据库范围内的唯一性。oid已被弃用近15年,为什么要使用它们?但是为什么不用简单的标识(或序列)列呢?