ROWID-äquivalent in PostgreSQL-9.2
Gibt es eine Möglichkeit zu bekommen, rowid des Datensatzes in postgres??
In oracle, die ich nutzen kann wie
SELECT MAX(BILLS.ROWID) FROM BILLS
- Sorry, aber oracle ROWID nicht geben Sie die Nummer der Zeile.
- Was wird der Zweck dieses
ROWID
? - Ich brauche, um die Letzte Zeile(Letzte Satz) in einer Tabelle. Dafür bin ich mit sub-query wie SELECT * FROM RECHNUNGEN WHERE ROWID=(SELECT MAX(RECHNUNGEN.ROWID) VON RECHNUNGEN)
- Die Zeile mit der höchsten Zeilennummer ist NICHT (ich wiederhole NICHT) garantiert die "neueste" Reihe. Das ist eine völlig falsche Annahme.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist eine ctid-Spalte entspricht der rowid. Aber ist nutzlos für Sie. Rowid und ctid sind physische Zeile/Tupel-IDS => ändern kann nach dem Umbau/Vakuum.
Finden Sie unter: Kapitel 5. Daten-Definition - > 5.4. System-Spalten
PostgreSQL row_number() window-Funktion kann verwendet werden, für die meisten Zwecke, denen Sie verwenden würden, rowid. Während bei Oracle die rowid ist eine intrinsische Nummerierung der Ergebnis-Daten-Zeilen, die in Postgres row_number() berechnet eine Nummerierung innerhalb einer logischen Reihenfolge der zurückgegebenen Daten. Normalerweise, wenn Sie möchten, die Anzahl der Zeilen, bedeutet es, dass Sie erwarten, dass Sie in einer bestimmten Reihenfolge, so würden Sie angeben, welche Spalte(N), um die Reihenfolge der Zeilen, wenn die Nummerierung:
Wenn Sie wollen einfach nur die Zeilen nummeriert willkürlich Sie können die over-Klausel leer:
Wenn Sie berechnen wollen, ein Aggregat über die Nummer der Zeile, die Sie haben eine Unterabfrage verwenden:
Wenn alles, was Sie brauchen, ist das Letzte Element aus einer Tabelle, und Sie haben eine Spalte zu Sortieren nummeriert, es gibt einen einfacheren Ansatz als die Verwendung von row_number(). Nur in umgekehrter Reihenfolge Sortieren, und wählen Sie das erste Element:
Eine Sequenz verwenden. Sie können wählen Sie die 4 oder 8 byte-Werte.
http://www.neilconway.org/docs/sequences/
Fügen Sie alle eindeutigen Spalte der Tabelle(name vielleicht rowid).
Und verhindern, ändern, indem Sie BEFORE UPDATE-trigger, die raise exception, wenn jemand wird versuchen, zu aktualisieren.
Sie können füllen Sie diese Spalte mit der Reihenfolge, wie @JohnMudd erwähnt.