2013-01-31 22 views
8

Có cách nào để có được rowid của một bản ghi trong postgres ??ROWID tương đương trong postgres 9.2

Trong oracle tôi có thể sử dụng như

SELECT MAX(BILLS.ROWID) FROM BILLS 
+3

Xin lỗi, nhưng ROWID oracle không cung cấp cho bạn số thứ tự hàng. – gustavodidomenico

+0

Mục đích của 'ROWID' này là gì? –

+0

Tôi cần lấy hàng mới nhất (bản ghi cuối cùng) trong một bảng. Đối với điều này tôi đang sử dụng truy vấn phụ như SELECT * FROM BILLS WHERE ROWID = (SELECT MAX (BILLS.ROWID) TỪ BILLS) – jobi88

Trả lời

8

cột Vâng, có được CTID đó là tương đương cho rowid. Nhưng là vô ích cho bạn. Rowid và citd là các hằng số vật lý/tuple identifier => có thể thay đổi sau khi rebuild/vacuum.

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

+11

ROWID chắc chắn không phải là vô dụng. Bởi vì nó là định danh vật lý của vị trí của hàng nên nó là truy cập nhanh nhất có thể vào hàng đó (nhanh hơn so với tra cứu PK). Một số hoạt động hàng loạt nhất định có thể được tăng tốc đáng kể bằng cách bán phá giá ROWIDs, sau đó sử dụng chúng làm khóa cập nhật. Thậm chí hữu ích hơn, ROWID có thể được sử dụng trong xóa bỏ để chọn trong số các hàng khác nhau giống nhau, ví dụ: xóa từ sometable nơi rowid không in (chọn min (rowid) từ nhóm có thể bởi một số, cột, có, nên, được, duy nhất); ROWID và CTID đó có thể thay đổi theo thời gian là một cảnh báo hợp lệ nhưng không làm cho chúng "vô dụng". –

+0

Tôi sử dụng ROWID mọi lúc nhưng chỉ trong ngữ cảnh của một giao dịch. –

+4

@NoahYetter: công bằng: iddqd đã nói "useless _for you_" (giải quyết OP) và tôi đoán anh/cô ấy đang đề cập đến thực tế là jobi88 giả định rằng rowid định nghĩa một số thứ tự của các hàng. Các rowid là chắc chắn nhất "vô ích" để tìm "hàng mới nhất" –

0

Thêm bất kỳ cột nào vào bảng của bạn (tên có thể là hàng). Và ngăn thay đổi bằng cách tạo kích hoạt TRƯỚC KHI CẬP NHẬT, điều này sẽ tăng ngoại lệ nếu ai đó cố gắng cập nhật. Bạn có thể điền cột này theo thứ tự như @JohnMudd được đề cập.