Nein. Da es keine natürliche Ordnung gibt von Zeilen in einer Datenbanktabelle müssen Sie nur mit den Werten in Ihrer Tabelle arbeiten.
Nun, es gibt die Postgres-spezifischen Systemspalten cmin
und ctid
Sie könnten bis zu einem gewissen Grad missbrauchen.
Die Tupel-ID (ctid
) enthält die Dateiblocknummer und die Position im Block für die Zeile. Dies stellt also die aktuelle physische Reihenfolge auf der Festplatte dar. Spätere Ergänzungen haben eine größere ctid
, normalerweise . Ihre SELECT-Anweisung könnte so aussehen
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
hat den Datentyp tid
. Beispiel:'(0,9)'::tid
Allerdings ist es nicht stabil als Langzeitkennung, seit VACUUM
oder jedes gleichzeitige UPDATE
oder einige andere Operationen können die physische Position eines Tupels jederzeit ändern. Für die Dauer einer Transaktion ist es jedoch stabil. Und wenn Sie nur und nichts einfügen andernfalls sollte es für Ihren Zweck lokal funktionieren.
Ich würde eine Timestamp-Spalte mit dem Standardwert now()
hinzufügen zusätzlich zur serial
Spalte ...
Ich würde auch eine Spalte voreinstellen lassen geben Sie Ihre id
ein Spalte (eine serial
oder IDENTITY
Säule). Dadurch wird die Nummer aus der Sequenz zu einem späteren Zeitpunkt abgerufen als durch explizites Abrufen und anschließendes Einfügen, wodurch das Fenster für eine Race-Condition minimiert (aber nicht eliminiert) wird - die Chance, dass eine niedrigere id
würde zu einem späteren Zeitpunkt eingefügt werden. Detaillierte Anleitung:
- Tabellenspalte automatisch erhöhen