Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何在12岁以上的postgres版本上自动生成OID_Postgresql_Ddl - Fatal编程技术网

Postgresql 如何在12岁以上的postgres版本上自动生成OID

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

我目前正在将我的团队数据库从postgres 10迁移到postgres 13。我的团队正在设计一个基于java的应用程序,它构建在postgres上,因此我们不想迁移数据库,只需编辑代码,使我们的程序与postgres 13兼容。是否有自动生成OID的命令?这是我们目前的代码,它与postgres 10兼容,但与postgres 13不兼容

        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年,为什么要使用它们?但是为什么不用简单的标识(或序列)列呢?