Care este echivalentul PostgreSQL cu ROWNUM și ROWID Oracle?


Cel mai bun răspuns

Am lucrat atât cu baze de date Oracle, cât și cu PostgreSQL și, așadar, răspund la acest lucru întrebare pur și simplu bazată pe propria experiență cu ei.

  • Echivalent pentru ROWID al Oracle

PostgreSQL conține propriile coloane definite de sistem și, printre aceste coloane, puteți folosi fie ctid , fie oid ca echivalent pentru rândul Oracle.

ctid – Este o coloană de sistem PostgreSQL cu tip de date tid (identificator tuple). Coloana conține informații despre blocurile fizice la nivel de înregistrare (la nivel de rând). Cu toate acestea, această valoare a coloanei se modifică de fiecare dată când actualizați o înregistrare sau efectuați operații de vid complet pe o masă. Prin urmare, puteți utiliza această valoare a coloanei ca identificator unic de rând numai în scopuri temporare, de exemplu, ștergerea duplicatelor dintr-un tabel. Nu vă puteți baza pe această valoare a coloanei pentru a decide unicitatea nivelului de înregistrare pe un tabel dacă doriți să aplicați utilizarea acestuia pentru cazurile de utilizare pe termen lung, cum ar fi efectuarea inserțiilor incrementale într-un tabel pe baza valorii maxime / ultimei coloane inserate.

oid – Cunoscut ca „identificator de obiect”, oid conține valori unice pentru o înregistrare logică / rând. Este de tip oid (la fel ca numele coloanei). Cu toate acestea, trebuie să creați în mod explicit un tabel folosind sintaxa „WITH OIDS” pentru ca această coloană să fie creată pentru un tabel. Puteți verifica un exemplu aici .

Nota :

Din PostgreSQL 12, uleiurile nu mai pot fi utilizate. Acest lucru se datorează faptului că oid este implementat folosind un număr întreg de 4 octeți nesemnat și, prin urmare, este periculos să te bazezi pe ele pentru unicitate, mai ales atunci când tabelele tale cresc în masă.

Pe baza experienței mele personale cu PostgreSQL, este întotdeauna mai bine să folosiți o valoare de coloană definită de utilizator, cum ar fi Cheia surogat, pentru a identifica în mod unic înregistrările dacă tabelul dvs. nu are o cheie primară.

  • Echivalent pentru Oracles ROWNUM

PostgreSQL nu are un echivalent exact pentru un rownum în care ai putea folosi interogările dvs. SQL „ select” . Cu toate acestea, îl puteți imita creând o valoare unică în timp real în interogările SQL.

De exemplu (presupunând că interogarea dvs. peste un tabel conține 3 coloane),

SELECT

COL\_A,

COL\_B,

COL\_C,

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

FROM \_TABLE

Cu toate acestea, ROWNUM în Oracle este deja atribuit când citiți un tuplu de pe disc, în timp ce, în interogarea de mai sus, îl generați după citirea tuplurilor și, prin urmare, mai aveți nevoie de un pas când doresc să aplicăm valoarea ROWNUM generată.

Notă:

Ați putea lua în considerare și PostgreSQL limit ca un echivalent apropiat cu ROWNUM, dar trebuie să utilizați încă o funcționalitate a PostgreSQL numită offset atunci când doriți să imitați utilizarea ROWNUM a lui Oracle pentru o filtrarea intervalului (cum ar fi ROWNUM între A și B). Puteți căuta un exemplu aici .

Vă mulțumim că ați citit !!

நன்றி \_ / \ \_

Răspundeți

PostgreSQL ROW\_NUMBER () Explicat cu exemple practice

Deja a fost întrebat:

Care este echivalentul PostgreSQL al Oracle „s ROWNUM și ROWID?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *