Existe-t-il un moyen de récupérer un enregistrement dans Postgres?
Dans Oracle, je peux utiliser comme
SELECT MAX(BILLS.ROWID) FROM BILLS
Oui, il y a une colonne ctid qui est équivalente pour rowid. Mais est inutile pour vous. Rowid et ctid sont des identificateurs de ligne/tuple physiques => peuvent changer après la reconstruction/le vide
Voir: Chapitre 5. Définition de données> 5.4. Colonnes système
Utilisez une séquence. Vous pouvez choisir 4 ou 8 octets.
La fonction de fenêtre PostgreSQL row_number () peut être utilisée dans la plupart des cas où vous utiliseriez rowid. Alors que, dans Oracle, rowid est une numérotation intrinsèque des lignes de données de résultats, dans Postgres row_number () calcule une numérotation dans un ordre logique des données renvoyées. Normalement, si vous souhaitez numéroter les lignes, cela signifie que vous les attendez dans un ordre particulier. Vous devez donc spécifier la ou les colonnes à classer les lignes lors de leur numérotation:
select client_name, row_number() over (order by date) from bills;
Si vous souhaitez simplement numéroter les lignes de manière arbitraire, vous pouvez laisser la clause over vide:
select client_name, row_number() over () from bills;
Si vous voulez calculer un agrégat sur le nombre de lignes, vous devrez utiliser une sous-requête:
select max(rownum) from (
select row_number() over () as rownum from bills
) r;
Si tout ce dont vous avez besoin est le dernier élément d'une table et que vous ayez une colonne pour effectuer un tri séquentiel, l'approche est plus simple que d'utiliser row_number (). Il suffit d'inverser l'ordre de tri et de sélectionner le premier élément:
select * from bills
order by date desc limit 1;
Ajouter une colonne unique à votre table (nom peut-être rowid). Et évitez de le modifier en créant le déclencheur BEFORE UPDATE, qui déclenchera une exception si quelqu'un essaie de mettre à jour . Vous pouvez remplir cette colonne avec la séquence indiquée par @JohnMudd.