Beste svaret
Jeg har jobbet med både Oracle og PostgreSQL-databaser, og så svarer jeg på dette spørsmål utelukkende basert på min egen erfaring med dem.
- Tilsvarer Oracles ROWID
PostgreSQL inneholder sine egne systemdefinerte kolonner, og blant slike kolonner kan du bruke enten ctid eller oid som en ekvivalent for Oracles rowid.
ctid – Det er en PostgreSQL-systemkolonne av datatypen tid (tupleidentifikator). Kolonnen inneholder informasjon om de fysiske blokkene på rekordnivå (radnivå). Denne kolonneverdien endres imidlertid hver gang du oppdaterer en post eller utfører fullstendige vakuumoperasjoner på et bord. Derfor kan du bruke denne kolonneverdien som en unik radidentifikator bare for midlertidige formål, for eksempel for å slette duplikater i en tabell. Du kan ikke stole på denne kolonneverdien for å bestemme unikhetsnivået på posten på en tabell hvis du vil bruke bruken av den i langvarige brukstilfeller, for eksempel å utføre trinnvise innsatser i en tabell basert på maksimum / sist satt inn kolonneverdi.
oid – kjent som «objektidentifikator», inneholder oid unike verdier for en logisk post / rad. Det er av typen oid (samme som kolonnenavnet). Du må imidlertid opprette en tabell eksplisitt ved hjelp av «WITH OIDS» -syntaks for at denne kolonnen skal opprettes for en tabell. Du kan sjekke et eksempel her .
Merk :
Fra PostgreSQL 12 kan ikke ids brukes lenger. Dette er fordi oid er implementert ved hjelp av usignert 4 byte heltall, og det er derfor farlig å stole på dem for unikhet, spesielt når bordene dine vokser massivt.
Basert på min personlige erfaring med PostgreSQL, er det alltid bedre å bruke en brukerdefinert kolonneverdi som Surrogate Key for å identifisere poster unikt hvis tabellen din ikke har en primærnøkkel.
- Tilsvarende for Oracles ROWNUM
PostgreSQL har ikke et eksakt ekvivalent for et rownum som du kan bruke i SQL-spørsmålene dine <