postgresql – 有序序列生成
有没有办法为表记录生成某种有序标识符?
假设我们有两个线程在进行查询: 线程1: begin; insert into table1(id,value) values (nextval('table1_seq'),'hello'); commit; 线程2: begin; insert into table1(id,'world'); commit; 完全可能(取决于时间)外部观察者会看到(2,’世界’)记录出现在(1,’你好’)之前. 这很好,但是我想要一种方法来获取自上次外部观察者检查它以来出现的’table1’中的所有记录. 那么,有没有办法按照插入的顺序获取记录?也许OID可以提供帮助?
不可以.由于数据库表中没有自然的行顺序,因此您需要使用的只是表中的值.
好吧,你可以在某种程度上滥用Postgres specific system columns 元组ID(ctid)包含文件块编号和行的块中的位置.所以这代表了磁盘上当前的物理排序.通常情况下,后来添加的ctid会更大.您的SELECT语句可能如下所示 SELECT *,ctid -- save ctid from last row in last_ctid FROM tbl WHERE ctid > last_ctid ORDER BY ctid ctid的数据类型为tid.示例:'(0,9)’:: tid 但是它作为长期标识符并不稳定,因为VACUUM或任何并发UPDATE或其他一些操作可以随时改变元组的物理位置.但是,在交易期间,它是稳定的.如果您只是插入而没有其他内容,它应该在本地工作以达到您的目的. 除了串行列,我还会添加一个带有默认now()的timestamp列… 我还会让列默认填充您的id列( > Auto increment table column (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |