Nej. Eftersom det ingen naturlig ordning finns rader i en databastabell, allt du behöver arbeta med är värdena i din tabell.
Tja, det finns Postgres specifika systemkolumner cmin
och ctid
du kunde missbruk till viss del.
Tuppel-ID (ctid
) innehåller filblocknummer och position i blocket för raden. Så detta representerar den aktuella fysiska ordningen på disken. Senare tillägg kommer att ha en större ctid
, normalt . Din SELECT-sats kan se ut så här
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
har datatypen tid
. Exempel:'(0,9)'::tid
Det är dock inte stabilt som långsiktig identifierare, eftersom VACUUM
eller någon samtidig UPDATE
eller några andra operationer kan ändra den fysiska platsen för en tupel när som helst. Under en transaktions varaktighet är den dock stabil. Och om du bara infogar och ingenting annars bör det fungera lokalt för ditt ändamål.
Jag skulle lägga till en tidsstämpelskolumn med standard now()
förutom serial
kolumn ...
Jag skulle också låta en kolumn standard fyll i ditt id
kolumn (en serial
eller IDENTITY
kolumn). Det hämtar numret från sekvensen i ett senare skede än att explicit hämta och sedan infoga det, och därigenom minimera (men inte eliminera) fönstret för ett tävlingstillstånd - chansen att ett lägre id
skulle införas vid ett senare tillfälle. Detaljerade instruktioner:
- Automatisk ökning av tabellkolumnen