Ne. Protože neexistuje žádný přirozený řád řádků v databázové tabulce, vše, s čím musíte pracovat, jsou hodnoty ve vaší tabulce.
Existují sloupce cmin specifické pro systém Postgres a ctid mohli zneužívání do určité míry.
ID n-tice (ctid ) obsahuje číslo bloku souboru a pozici v bloku pro řádek. To tedy představuje aktuální fyzické uspořádání na disku. Pozdější přídavky budou mít větší ctid , normálně . Váš příkaz SELECT může vypadat takto
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid má datový typ tid . Příklad:'(0,9)'::tid
Není však stabilní jako dlouhodobý identifikátor, od VACUUM nebo jakékoli souběžné UPDATE nebo některé další operace mohou kdykoli změnit fyzické umístění n-tice. Po dobu trvání transakce je však stabilní. A pokud právě vkládáte a nic jinak by to mělo fungovat lokálně pro váš účel.
Přidal bych sloupec časového razítka s výchozím now() kromě serial sloupec ...
Také bych nechal výchozí sloupec vyplňte své id sloupec (serial nebo IDENTITY sloupec). To načte číslo ze sekvence v pozdější fázi, než je explicitně načíst a poté jej vložit, čímž se minimalizuje (ale ne eliminuje) okno pro spor – pravděpodobnost, že nižší id bude vložen později. Podrobné pokyny:
- Automaticky zvyšovat sloupec tabulky