it-swarm.com.de

ROWID-Äquivalent in Postgres 9.2

Gibt es eine Möglichkeit, eine Datensatz-ID in Postgres zu bekommen?

In Oracle kann ich gerne verwenden

SELECT MAX(BILLS.ROWID) FROM BILLS  
15
jobi88

Ja, es gibt eine ctid-Spalte, die für rowid gleichwertig ist. Ist aber für dich unbrauchbar. Rowid und ctid sind physikalische Zeilen-/Tupel-Bezeichner => können sich nach dem Wiederaufbau/Vakuum ändern. 

Siehe: Kapitel 5. Datendefinition> 5.4. Systemspalten

11
baklarz2048

Verwenden Sie eine Sequenz. Sie können 4 oder 8 Byte Werte wählen.

http://www.neilconway.org/docs/sequences/

1
JohnMudd

Die PostgreSQL-Fensterfunktion row_number () kann für die meisten Zwecke verwendet werden, bei denen Sie die Zeilen-ID verwenden würden. Während die Zeilen-ID in Oracle eine intrinsische Nummerierung der Ergebnisdatenzeilen ist, berechnet row_number () in Postgres eine Nummerierung innerhalb einer logischen Reihenfolge der zurückgegebenen Daten. Normalerweise, wenn Sie die Zeilen nummerieren möchten, bedeutet dies, dass Sie sie in einer bestimmten Reihenfolge erwarten. Geben Sie also an, welche Spalte (n) die Zeilen ordnen sollen, wenn Sie sie nummerieren:

select client_name, row_number() over (order by date) from bills;

Wenn Sie möchten, dass die Zeilen beliebig nummeriert werden, können Sie die over-Klausel leer lassen:

select client_name, row_number() over () from bills;

Wenn Sie ein Aggregat über die Zeilennummer berechnen möchten, müssen Sie eine Unterabfrage verwenden:

select max(rownum) from (
    select row_number() over () as rownum from bills
) r;

Wenn Sie nur das letzte Element aus einer Tabelle benötigen und Sie eine Spalte zum sequentiellen Sortieren haben, gibt es einen einfacheren Ansatz als die Verwendung von row_number (). Kehren Sie einfach die Sortierreihenfolge um und wählen Sie den ersten Artikel aus:

select * from bills 
order by date desc limit 1;
1
Oliver Crow

Fügen Sie Ihrer Tabelle eine eindeutige Spalte hinzu (Name möglicherweise Zeilen-ID). Verhindern Sie die Änderung, indem Sie den BEFORE UPDATE-Auslöser erstellen. Dies führt zu Ausnahmebedingungen, wenn jemand versucht, ein Update durchzuführen. Sie können diese Spalte mit der Sequenz "@JohnMudd" füllen.

0
Zaur Hajili