[メモ]PostgreSQLのctid [コンピュータ]
MLog: [pgsql-jp: 39258] Re:oidを使いたくなった場合
重複削除の SQL を書く場合、ctid が使えます。これは、行の物理位置を表します。
以下は、id をユニークの条件として、ctid が最大のもの以外を削除します。
DELETE FROM test
USING (SELECT id, max(ctid) AS ctid FROM test GROUP BY id) AS X
WHERE X.id = test.id AND X.ctid <> test.ctid;
System Columns
ctid
テーブル内における、行バージョンの物理的位置を表します。
ctid は行バージョンを素早く見つけるために使うことができますが、
行のctidは更新される、あるいはVACUUM FULLで移動させられると変わります。
したがって、ctidは長期の行識別子としては使えません。
論理行を識別するためには、OID、あるいはさらに良いのはユーザ定義の通番数を使うべきです。
コメント 0