web-dev-qa-db-fra.com

Equivalent ROWID en postgres 9.2

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  
15
jobi88

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

11
baklarz2048

Utilisez une séquence. Vous pouvez choisir 4 ou 8 octets.

http://www.neilconway.org/docs/sequences/

1
JohnMudd

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;
1
Oliver Crow

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.

0
Zaur Hajili