2013-01-31 8 views
8

ポストグルでレコードのROWIDを取得する方法はありますか?ポストグラムで同等のROWID 9.2

は、Oracleでiが行IDと同等である

SELECT MAX(BILLS.ROWID) FROM BILLS 
+3

申し訳ありませんが、oracle ROWIDは行番号を指定していません。 – gustavodidomenico

+0

この 'ROWID'の目的は何ですか? –

+0

私はテーブルの最新の行(最後のレコード)を取得する必要があります。このため私はSELECT * FROM BILLS WHERE ROWID =(BILLS.ROWID)からBILLSを選択してください。 – jobi88

答えて

8

はい、そこCTIDれるカラムように使用することができます。しかし、あなたには役に立たない。 Rowidとcitdは物理的な行/タプル識別子です。>再構築/消去後に変更できます。

http://www.postgresql.org/docs/8.3/static/ddl-system-columns.html

+11

ROWIDは無意味ではありません。行の位置の物理的な識別子なので、その行への最速のアクセスが可能です(PKルックアップよりも高速です)。特定のバッチ操作は、ROWIDをダンプして更新キーとして使用することによって大幅に高速化できます。さらに便利には、ROWIDを使用すると、重複排除では、それ以外の場合は同じ行の中から選択することができます。たとえば、sometableから削除するwhere rowid not in(min(rowid)をsometable groupからいくつかの列で選択します。 );そのROWIDとCTIDは時間の経過とともに変更可能ですが、有効な注意ですが、「役に立たない」ことはありません。 –

+0

私はいつもROWIDを使用しますが、単一のトランザクションのコンテキストでのみ使用します。 –

+4

@NoahYetter:公平であること:iddqdは "役に立たない"と答えました。私は、jobi88がROWIDが行のある種の順序を定義していると仮定しているということを指していたと思います。 ROWIDは、「最新の行」を見つけるために最も確かに「役に立たない」 –

0

(名前は多分のROWID)あなたのテーブルに任意の一意の列を追加します。 BEFORE UPDATEトリガーを作成して変更を防止すると、誰かが更新を試みると例外が発生します。 この列に@ JohnMuddというシーケンスを挿入することができます。