No. Poiché non esiste nessun ordine naturale di righe in una tabella di database, tutto ciò con cui devi lavorare sono i valori nella tua tabella.
Bene, ci sono le colonne di sistema specifiche di Postgres cmin
e ctid
tu potresti abuso in una certa misura.
L'ID tupla (ctid
) contiene il numero del blocco di file e la posizione nel blocco per la riga. Quindi questo rappresenta l'ordine fisico corrente su disco. Le aggiunte successive avranno un ctid
più grande , normalmente . La tua istruzione SELECT potrebbe assomigliare a questa
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
ha il tipo di dati tid
. Esempio:'(0,9)'::tid
Tuttavia non è stabile come identificatore a lungo termine, dal momento che VACUUM
o qualsiasi UPDATE
simultaneo o alcune altre operazioni possono modificare la posizione fisica di una tupla in qualsiasi momento. Tuttavia, per la durata di una transazione è stabile. E se stai solo inserendo e niente altrimenti, dovrebbe funzionare localmente per il tuo scopo.
Aggiungerei una colonna timestamp con now()
predefinito oltre al serial
colonna ...
Lascerei anche una colonna predefinita compila il tuo id
colonna (un serial
o IDENTITY
colonna). Ciò recupera il numero dalla sequenza in una fase successiva rispetto al recupero e all'inserimento esplicito, riducendo così al minimo (ma non eliminando) la finestra per una condizione di gara:la possibilità che un id
inferiore verrebbe inserito in un secondo momento. Istruzioni dettagliate:
- Colonna tabella con incremento automatico