Mi az Oracle ROWNUM és ROWID PostgreSQL megfelelője?


Legjobb válasz

Mind az Oracle, mind a PostgreSQL adatbázisokkal dolgoztam, ezért erre válaszolok kérdés pusztán a velük kapcsolatos saját tapasztalataim alapján.

  • Az Oracle ROWID egyenértékű

A PostgreSQL saját, rendszer által definiált oszlopokat tartalmaz, és az ilyen oszlopok között használhatja a ctid vagy a oid egyenértékű az Oracle soros azonosítójával. Az oszlop rekordszintű (sorszintű) információt tartalmaz a fizikai blokkokról. Ez az oszlop értéke azonban folyamatosan változik, amikor egy rekordot frissít vagy teljes vákuum műveleteket hajt végre egy táblán. Ezért ezt az oszlopértéket egyedi sorazonosítóként csak ideiglenes célokra használhatja, például egy táblázat duplikátumainak törlésére. Nem támaszkodhat erre az oszlopértékre a rekord rekordszint egyediségének eldöntésében, ha hosszú távú felhasználási esetekben szeretné alkalmazni a használatát, például növekményes beillesztéseket hajt végre egy táblán a maximális / utoljára beillesztett oszlopérték alapján.

oid – Az “objektumazonosító” néven ismert oid egyedi értékeket tartalmaz egy logikai rekord / sor számára. Oid típusú (ugyanaz, mint az oszlop neve). Azonban egy táblázathoz kifejezetten létre kell hoznia egy táblázatot a „WIDS OIDS” szintaxissal az oszlop létrehozásához. példát itt ellenőrizhet .

Megjegyzés :

A PostgreSQL 12-ből az oidok már nem használhatók. Ez azért van, mert az oid aláíratlan 4 bájtos egész szám felhasználásával valósul meg, ezért veszélyes rájuk támaszkodni az egyediség érdekében, különösen akkor, ha a táblázatok tömegesen növekednek.

A PostgreSQL-lel kapcsolatos személyes tapasztalataim alapján mindig jobb, ha a felhasználó által definiált oszlopértéket, például Helyettesítő kulcsot használunk a rekordok egyedi azonosításához, ha a táblában nincs elsődleges kulcs.

  • Az Oracle ROWNUM egyenértékű

A PostgreSQL nincs pontos megfelelője egy olyan rownumhoz, amelyet felhasználhatna az SQL “ select” lekérdezések. Utánozhatja azt is, ha egyedi értéket hoz létre menet közben az SQL lekérdezéseiben.

Például (ha feltételezzük, hogy a tábla feletti lekérdezés 3 oszlopot tartalmaz),

SELECT

COL\_A,

COL\_B,

COL\_C,

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

FROM \_TABLE

valójában a létrehozott ROWNUM értéket szeretné alkalmazni.

Megjegyzés:

Fontolja meg a PostgreSQL limit mint a ROWNUM szoros megfelelője, de még egy funkciót kell használnia a PostgreSQL eltolás amikor az Oracle ROWNUM használatát szeretné utánozni egy tartományszűrés (például ROWNUM A és B között). Példát kereshet itt .

Köszönjük, hogy elolvastad !!

நன்றி \_ / \ \_

Válasz

PostgreSQL ROW\_NUMBER () Gyakorlati példákkal magyarázva

Már megkérdezték:

Mi az Oracle PostgreSQL megfelelője ROWNUM és ROWID?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük