Nie. Ponieważ nie ma nie ma naturalnego porządku wierszy w tabeli bazy danych, wszystko, z czym musisz pracować, to wartości w Twojej tabeli.
Cóż, istnieją kolumny systemowe specyficzne dla Postgresa cmin
i ctid
mogłeś nadużycia do pewnego stopnia.
Identyfikator krotki (ctid
) zawiera numer bloku pliku i pozycję w bloku dla wiersza. Reprezentuje to więc bieżące fizyczne uporządkowanie na dysku. Późniejsze dodatki będą miały większy ctid
, normalnie . Twoja instrukcja SELECT może wyglądać tak
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
ma typ danych tid
. Przykład:'(0,9)'::tid
Jednak nie jest stabilny jako identyfikator długoterminowy, ponieważ VACUUM
lub dowolna jednoczesna UPDATE
lub niektóre inne operacje mogą w dowolnym momencie zmienić fizyczną lokalizację krotki. Na czas trwania transakcji jest jednak stabilna. A jeśli tylko wstawiasz i nic w przeciwnym razie powinno działać lokalnie w Twoim celu.
Dodałbym kolumnę sygnatury czasowej z domyślną now()
oprócz serial
kolumna ...
Pozwoliłbym również, aby kolumna była domyślna wypełnij swój id
kolumna (serial
lub IDENTITY
kolumna). To pobiera numer z sekwencji na późniejszym etapie niż jawne pobranie, a następnie wstawienie go, minimalizując w ten sposób (ale nie eliminując) okno dla sytuacji wyścigu - prawdopodobieństwo, że niższy id
zostanie wstawiony w późniejszym czasie. Szczegółowe instrukcje:
- Automatyczna inkrementacja kolumny tabeli