天天看点

PostgreSQL Oracle 兼容性之 - rowid (CREATE TABLE WITH OIDS)

PostgreSQL , Oracle , 兼容性 , 行号 , rowid , oid , ctid

Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录。

PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录。

但是PostgreSQL的引擎为多版本引擎,因此一条记录在被更新后CTID会发生变化(代表了新的版本)。

不管是Oracle还是PostgreSQL,业务层面都不建议使用行号来唯一标识一条记录。因为Oracle的一些操作也可能产生行迁移,导致ROWID变化。

那么有没有一定不变的字段可以用来标识一条记录呢?

PostgreSQL有多种方法,可以实现这一目的,一个生成后就与该ROW绑定,并永恒不变的ID。

例子