Paras vastaus
Olen työskennellyt sekä Oracle- että PostgreSQL-tietokantojen kanssa, joten vastaan tähän kysymys puhtaasti omasta kokemuksestani heidän kanssaan.
- Vastaa Oraclen ROWID-tunnusta
PostgreSQL sisältää omat järjestelmän määrittelemät sarakkeet, ja tällaisten sarakkeiden joukossa voit käyttää joko ctid tai oid vastaavuutena Oraclen rowidille.
ctid – Se on PostgreSQL-järjestelmän sarake, joka sisältää tietotyypin tid (tuple identifier). Sarake sisältää tietoja fyysisistä lohkoista tietuetasolla (rivitaso). Tämä sarakkeen arvo muuttuu kuitenkin aina, kun päivität tietueen tai suoritat täyden tyhjiötoimenpiteen taulukossa. Siksi voit käyttää tätä sarakearvoa yksilöllisenä rivitunnisteena vain väliaikaisiin tarkoituksiin, esimerkiksi kaksoiskappaleiden poistamiseksi taulukosta. Et voi luottaa tähän sarakearvoon päättäessäsi tietuetason ainutlaatuisuuden taulukossa, jos haluat soveltaa sen käyttöä pitkäaikaisiin käyttötapauksiin, kuten inkrementaalisten lisäysten tekemiseen taulukkoon korkeimman / viimeisen lisätyn sarakkeen arvon perusteella.
oid – Oid tunnetaan nimellä ”objektitunniste”, ja se sisältää ainutlaatuisia arvoja loogiselle tietueelle / riville. Se on tyyppiä oid (sama kuin sarakkeen nimi). Sinun on kuitenkin luotava nimenomaisesti taulukko käyttäen WITH OIDS -syntaksi, jotta tämä sarake luodaan taulukolle. Voit tarkistaa esimerkin täältä .
Huomautus :
PostgreSQL 12: sta ei voi enää käyttää oideja. Tämä johtuu siitä, että oid toteutetaan allekirjoittamattomalla 4 tavun kokonaisluvulla, joten on vaarallista luottaa niihin ainutlaatuisuuteen varsinkin kun taulukot kasvavat voimakkaasti.
Henkilökohtaisen kokemukseni perusteella PostgreSQL: stä on aina parempi käyttää käyttäjän määrittelemää sarakearvoa, kuten Surrogate Key, yksilöidäksesi tietueet, jos taulukossasi ei ole ensisijaista avainta.
- Vastaa Oraclen ROWNUMia
PostgreSQL: llä ei ole tarkkaa vastaavuutta rownumille, jota voit käyttää SQL ” select” -kyselysi. Voit kuitenkin matkia sitä luomalla yksilöllisen arvon lennossa SQL-kyselyihisi.
Esimerkiksi (olettaen, että kyselysi taulukon päällä sisältää 3 saraketta),
SELECT
COL\_A,
COL\_B,
COL\_C,
ROW\_NUMBER() OVER (ORDER BY COL\_A ASC) AS ROWNUM
FROM \_TABLE
todella haluat käyttää luotua ROWNUM-arvoa.
Huomaa:
Voisit myös harkita PostgreSQL: n raja läheisenä vastaavuutena kuin ROWNUM, mutta sinun on käytettävä vielä yhtä PostgreSQL: n toimintoa nimeltä offset , kun haluat jäljitellä Oraclen ROWNUM-käyttöä alueen suodatus (kuten ROWNUM välillä A ja B). Voit tarkistaa esimerkin täältä .
Kiitos lukemisesta !!
நன்றி \_ / \ \_
Vastaa
PostgreSQL ROW\_NUMBER () Selitetty käytännön esimerkeillä
Jo kysytty:
Mikä on Oraclen ”PostgreSQL-vastine” ROWNUM ja ROWID?