有沒有辦法爲表記錄生成某種有序標識符?按順序生成
假設我們有兩個線程做查詢:
主題1:
begin;
insert into table1(id, value) values (nextval('table1_seq'), 'hello');
commit;
線程2:
begin;
insert into table1(id, value) values (nextval('table1_seq'), 'world');
commit;
這是完全可能的(取決於時間),一個外部觀察者會看(2,'world')記錄出現在(1,'hello')之前。
這很好,但我想要一種方法來獲取自上次外部觀察者檢查後出現的'table1'中的所有記錄。
那麼,有沒有辦法按照插入的順序來獲取記錄?也許OID可以提供幫助?
我不認爲依靠物理行位置是一種有效的策略。中止的事務,丟失的數據庫連接等都可以使後面一行按錯誤順序排列。同樣使用串行列是不夠的,因爲在插入一行和提交一個thread1事務之間可能會有任何延遲,這可能會使thread2事務在它之前被提交和看到。 – Tometzky
@Tometzky:我同意這不可靠。因爲我已經提到了更多的原因。它僅僅排除了一些無序元組的原因(比如單獨從序列中獲取ID),而不是其他的。 –
我試圖濫用CTID,但它不起作用,因爲我也想不時地刪除一些行。有一個自動單調遞增計數器會很好,但我想我必須做明確的鎖定。 – Cyberax