Nee. Omdat er geen natuurlijke volgorde is van rijen in een databasetabel, het enige waarmee u hoeft te werken zijn de waarden in uw tabel.
Welnu, er zijn de Postgres-specifieke systeemkolommen cmin
en ctid
je zou tot op zekere hoogte misbruiken.
De tuple-ID (ctid
) bevat het bestandsbloknummer en de positie in het blok voor de rij. Dit vertegenwoordigt dus de huidige fysieke ordening op schijf. Latere toevoegingen hebben een grotere ctid
, normaal . Uw SELECT-instructie zou er zo uit kunnen zien
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
heeft het gegevenstype tid
. Voorbeeld:'(0,9)'::tid
Het is echter niet stabiel als identificatie op lange termijn, sinds VACUUM
of een gelijktijdige UPDATE
of andere bewerkingen kunnen de fysieke locatie van een tuple op elk moment wijzigen. Voor de duur van een transactie is het echter stabiel. En als je gewoon invoegt en niets anders zou het lokaal moeten werken voor uw doel.
Ik zou een tijdstempelkolom toevoegen met de standaard now()
naast de serial
kolom ...
Ik zou ook een kolom standaard . laten vul je id
in kolom (een serial
of IDENTITY
kolom). Dat haalt het nummer uit de reeks in een later stadium dan het expliciet ophalen en vervolgens invoegen, waardoor het venster voor een raceconditie wordt geminimaliseerd (maar niet geëlimineerd) - de kans dat een lagere id
zou op een later tijdstip worden ingevoegd. Gedetailleerde instructies:
- Tabelkolom automatisch verhogen