Не. Тъй като няма естествен ред от редове в таблица на база данни, всичко, с което трябва да работите, са стойностите във вашата таблица.
Е, има специфични за Postgres системни колони cmin
и ctid
ти можеш злоупотреба до известна степен.
Идентификационният номер на кортежа (ctid
) съдържа номера на файловия блок и позицията в блока за реда. Така че това представлява текущото физическо подреждане на диска. По-късните допълнения ще имат по-голям ctid
, обикновено . Вашият оператор SELECT може да изглежда така
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
има тип данни tid
. Пример:'(0,9)'::tid
Той обаче енестабилен като дългосрочен идентификатор, тъй като VACUUM
или всяка едновременна UPDATE
или някои други операции могат да променят физическото местоположение на кортеж по всяко време. За продължителността на транзакцията обаче е стабилен. И ако просто вмъквате и нищо иначе трябва да работи локално за вашата цел.
Бих добавил колона с времеви отпечатък с now()
по подразбиране в допълнение към serial
колона ...
Също така бих оставил колона по подразбиране попълнете вашия id
колона (serial
или IDENTITY
колона). Това извлича числото от последователността на по-късен етап, отколкото изричното извличане и след това го вмъкването, като по този начин минимизира (но не елиминира) прозореца за състояние на състезание - шансът, че по-нисък id
ще бъде вмъкнат по-късно. Подробни инструкции:
- Колона на таблицата с автоматично увеличение