Non. Puisqu'il n'y a pas d'ordre naturel de lignes dans une table de base de données, vous n'avez qu'à travailler avec les valeurs de votre table.
Eh bien, il y a les colonnes système spécifiques à Postgres cmin
et ctid
tu pourrais abus dans une certaine mesure.
L'ID de tuple (ctid
) contient le numéro de bloc de fichier et la position dans le bloc pour la ligne. Cela représente donc l'ordre physique actuel sur le disque. Les ajouts ultérieurs auront un ctid
plus grand , normalement . Votre instruction SELECT pourrait ressembler à ceci
SELECT *, ctid -- save ctid from last row in last_ctid
FROM tbl
WHERE ctid > last_ctid
ORDER BY ctid
ctid
a le type de données tid
. Exemple :'(0,9)'::tid
Cependant, il n'est pas stable comme identifiant à long terme, puisque VACUUM
ou toute UPDATE
simultanée ou certaines autres opérations peuvent modifier l'emplacement physique d'un tuple à tout moment. Pendant la durée d'une transaction, il est stable, cependant. Et si vous insérez juste et rien sinon, cela devrait fonctionner localement pour votre objectif.
J'ajouterais une colonne d'horodatage avec la valeur par défaut now()
en plus du serial
colonne ...
Je laisserais également une colonne par défaut renseignez votre id
colonne (un serial
ou IDENTITY
colonne). Cela récupère le numéro de la séquence à un stade ultérieur à la récupération explicite puis à son insertion, minimisant ainsi (mais n'éliminant pas) la fenêtre d'une condition de concurrence - la possibilité qu'un id
inférieur serait inséré ultérieurement. Instructions détaillées :
- Colonne de tableau d'incrémentation automatique