Nej. Da der ingen naturlig orden er af rækker i en databasetabel, er det eneste du skal arbejde med værdierne i din tabel.
Nå, der er de Postgres-specifikke systemkolonner cmin
og ctid
du kunne misbrug til en vis grad.
Tupel-id'et (ctid
) indeholder filbloknummeret og positionen i blokken for rækken. Så dette repræsenterer den aktuelle fysiske bestilling på disken. Senere tilføjelser vil have en større ctid
, normalt . Din SELECT-sætning kunne se sådan ud
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
har datatypen tid
. Eksempel:'(0,9)'::tid
Den er dog ikke stabil som langsigtet identifikator, da VACUUM
eller enhver samtidig UPDATE
eller nogle andre operationer kan ændre den fysiske placering af en tupel til enhver tid. For varigheden af en transaktion er den dog stabil. Og hvis du bare indsætter og ingenting ellers burde det fungere lokalt til dit formål.
Jeg ville tilføje en tidsstempelkolonne med standard now()
ud over serial
kolonne ...
Jeg ville også lade en kolonne standard udfyld dit id
kolonne (en serial
eller IDENTITY
kolonne). Det henter nummeret fra sekvensen på et senere tidspunkt end ved eksplicit at hente og derefter indsætte det, og derved minimere (men ikke eliminere) vinduet for en løbstilstand - chancen for at et lavere id
ville blive indsat på et senere tidspunkt. Detaljerede instruktioner:
- Automatisk stigning i tabelkolonnen