Quel est léquivalent PostgreSQL des ROWNUM et ROWID dOracle?


Meilleure réponse

Jai travaillé avec des bases de données Oracle et PostgreSQL et donc, je réponds à ceci question uniquement basée sur ma propre expérience avec eux.

  • Équivalent du ROWID dOracle

PostgreSQL contient ses propres colonnes définies par le système et parmi ces colonnes, vous pouvez utiliser ctid ou oid comme équivalent pour le rowid dOracle.

ctid – Cest une colonne système PostgreSQL de type de données tid (identifiant de tuple). La colonne contient des informations sur les blocs physiques au niveau de lenregistrement (au niveau de la ligne). Cependant, cette valeur de colonne continue de changer chaque fois que vous mettez à jour un enregistrement ou effectuez des opérations de vide complet sur une table. Par conséquent, vous pouvez utiliser cette valeur de colonne comme identificateur de ligne unique uniquement à des fins temporaires, par exemple pour supprimer les doublons dans une table. Vous ne pouvez pas vous fier à cette valeur de colonne pour décider de lunicité du niveau denregistrement sur une table si vous souhaitez appliquer son utilisation pour des cas dutilisation à long terme tels que lexécution dinsertions incrémentielles dans une table en fonction de la valeur maximale / dernière de colonne insérée.

oid – Connu comme «identificateur dobjet», oid contient des valeurs uniques pour un enregistrement / une ligne logique. Il est de type oid (identique au nom de la colonne). Cependant, vous devez créer explicitement une table en utilisant la syntaxe «WITH OIDS» pour que cette colonne soit créée pour une table. Vous pouvez consulter un exemple ici .

Remarque :

Depuis PostgreSQL 12, les oids ne peuvent plus être utilisés. En effet, oid est implémenté en utilisant un entier non signé de 4 octets et, par conséquent, il est dangereux de se fier à eux pour lunicité, en particulier lorsque vos tables sont en croissance massive.

Daprès mon expérience personnelle avec PostgreSQL, il est toujours préférable dutiliser une valeur de colonne définie par lutilisateur telle que Surrogate Key pour identifier de manière unique les enregistrements si votre table na pas de clé primaire.

  • Equivalent pour le ROWNUM dOracle

PostgreSQL na pas déquivalent exact pour un rownum que vous pourriez utiliser dans vos requêtes SQL «  select » . Cependant, vous pouvez limiter en créant une valeur unique à la volée dans vos requêtes SQL.

Par exemple (en supposant que votre requête sur une table contient 3 colonnes),

SELECT

COL\_A,

COL\_B,

COL\_C,

ROW\_NUMBER() OVER (ORDER BY COL\_A ASC) AS ROWNUM

FROM \_TABLE

Cependant, ROWNUM dans Oracle est déjà attribué lorsque vous lisez un tuple à partir du disque alors que, dans la requête ci-dessus, vous le générez après avoir lu les tuples et par conséquent, vous avez besoin dune étape supplémentaire lorsque vous veulent réellement appliquer la valeur ROWNUM générée.

Remarque:

Vous pouvez également considérer PostgreSQL limit comme un équivalent proche de ROWNUM, mais vous devez utiliser une autre fonctionnalité de PostgreSQL appelée offset lorsque vous souhaitez imiter lutilisation de ROWNUM dOracle pour un filtrage de plage (tel que ROWNUM entre A et B). Vous pouvez rechercher un exemple ici .

Merci davoir lu !!

நன்றி \_ / \ \_

Réponse

PostgreSQL ROW\_NUMBER () Expliqué avec des exemples pratiques

Déjà demandé:

Quel est léquivalent PostgreSQL de Oracle « s ROWNUM et ROWID?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *