PostgreSQL , Oracle , 兼容性 , 行号 , rowid , oid , ctid
Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录。
PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录。
但是PostgreSQL的引擎为多版本引擎,因此一条记录在被更新后CTID会发生变化(代表了新的版本)。
不管是Oracle还是PostgreSQL,业务层面都不建议使用行号来唯一标识一条记录。因为Oracle的一些操作也可能产生行迁移,导致ROWID变化。
那么有没有一定不变的字段可以用来标识一条记录呢?
PostgreSQL有多种方法,可以实现这一目的,一个生成后就与该ROW绑定,并永恒不变的ID。
例子