PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Geração de sequência em ordem


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