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