sql >> Databasteknik >  >> RDS >> PostgreSQL

Generering av sekvenser i ordning

Nej. Eftersom det ingen naturlig ordning finns rader i en databastabell, allt du behöver arbeta med är värdena i din tabell.

Tja, det finns Postgres specifika systemkolumner cmin och ctid du kunde missbruk till viss del.

Tuppel-ID (ctid ) innehåller filblocknummer och position i blocket för raden. Så detta representerar den aktuella fysiska ordningen på disken. Senare tillägg kommer att ha en större ctid , normalt . Din SELECT-sats kan se ut så här

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

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

Det är dock inte stabilt som långsiktig identifierare, eftersom VACUUM eller någon samtidig UPDATE eller några andra operationer kan ändra den fysiska platsen för en tupel när som helst. Under en transaktions varaktighet är den dock stabil. Och om du bara infogar och ingenting annars bör det fungera lokalt för ditt ändamål.

Jag skulle lägga till en tidsstämpelskolumn med standard now() förutom serial kolumn ...

Jag skulle också låta en kolumn standard fyll i ditt id kolumn (en serial eller IDENTITY kolumn). Det hämtar numret från sekvensen i ett senare skede än att explicit hämta och sedan infoga det, och därigenom minimera (men inte eliminera) fönstret för ett tävlingstillstånd - chansen att ett lägre id skulle införas vid ett senare tillfälle. Detaljerade instruktioner:

  • Automatisk ökning av tabellkolumnen


  1. Skapa tabell i procedur

  2. Hur man installerar MySQL 8.0 på CentOS 8 / RHEL 8

  3. Anslut till en PostgreSQL-databas på en Docker-behållare

  4. Hur man returnerar en lista över tillgängliga teckenuppsättningar i MySQL