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