sql >> Database teknologi >  >> RDS >> PostgreSQL

Generering af rækkefølge i rækkefølge

Nej. Da der ingen naturlig orden er af rækker i en databasetabel, er det eneste du skal arbejde med værdierne i din tabel.

Nå, der er de Postgres-specifikke systemkolonner cmin og ctid du kunne misbrug til en vis grad.

Tupel-id'et (ctid ) indeholder filbloknummeret og positionen i blokken for rækken. Så dette repræsenterer den aktuelle fysiske bestilling på disken. Senere tilføjelser vil have en større ctid , normalt . Din SELECT-sætning kunne se sådan ud

SELECT *, ctid   -- save ctid from last row in last_ctid
FROM   tbl
WHERE  ctid > last_ctid
ORDER  BY ctid

ctid har datatypen tid . Eksempel:'(0,9)'::tid

Den er dog ikke stabil som langsigtet identifikator, da VACUUM eller enhver samtidig UPDATE eller nogle andre operationer kan ændre den fysiske placering af en tupel til enhver tid. For varigheden af ​​en transaktion er den dog stabil. Og hvis du bare indsætter og ingenting ellers burde det fungere lokalt til dit formål.

Jeg ville tilføje en tidsstempelkolonne med standard now() ud over serial kolonne ...

Jeg ville også lade en kolonne standard udfyld dit id kolonne (en serial eller IDENTITY kolonne). Det henter nummeret fra sekvensen på et senere tidspunkt end ved eksplicit at hente og derefter indsætte det, og derved minimere (men ikke eliminere) vinduet for en løbstilstand - chancen for at et lavere id ville blive indsat på et senere tidspunkt. Detaljerede instruktioner:

  • Automatisk stigning i tabelkolonnen


  1. Hvordan ændres mysql til mysqli?

  2. Vigtig PostgreSQL-overvågning - del 1

  3. SQL*Plus hvordan accepterer man tekstvariabel fra prompt?

  4. MySQL COT() Funktion – Returner cotangensen af ​​et tal i MySQL