Não. Como não há ordem natural de linhas em uma tabela de banco de dados, tudo o que você precisa trabalhar são os valores em sua tabela.
Bem, existem as colunas de sistema específicas do Postgres
cmin
e ctid
você poderia abuso em algum grau. O ID da tupla (
ctid
) contém o número do bloco do arquivo e a posição no bloco para a linha. Portanto, isso representa a ordenação física atual no disco. Adições posteriores terão um ctid
maior , normalmente . Sua instrução SELECT pode ficar assim SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
tem o tipo de dados tid
. Exemplo:'(0,9)'::tid
No entanto, não é estável como identificador de longo prazo, pois
VACUUM
ou qualquer UPDATE
simultâneo ou algumas outras operações podem alterar a localização física de uma tupla a qualquer momento. Para a duração de uma transação é estável, no entanto. E se você está apenas inserindo e nada caso contrário, ele deve funcionar localmente para sua finalidade. Eu adicionaria uma coluna de carimbo de data/hora com o padrão
now()
além do serial
coluna... Eu também deixaria uma coluna padrão preencha seu
id
coluna (uma serial
ou IDENTITY
coluna). Isso recupera o número da sequência em um estágio posterior ao de buscar explicitamente e inseri-lo, minimizando (mas não eliminando) a janela para uma condição de corrida - a chance de um id
menor seria inserido posteriormente. Instruções detalhadas:- Coluna da tabela de incremento automático