sql >> Database >  >> RDS >> PostgreSQL

Genereren van volgorde in volgorde

Nee. Omdat er geen natuurlijke volgorde is van rijen in een databasetabel, het enige waarmee u hoeft te werken zijn de waarden in uw tabel.

Welnu, er zijn de Postgres-specifieke systeemkolommen cmin en ctid je zou tot op zekere hoogte misbruiken.

De tuple-ID (ctid ) bevat het bestandsbloknummer en de positie in het blok voor de rij. Dit vertegenwoordigt dus de huidige fysieke ordening op schijf. Latere toevoegingen hebben een grotere ctid , normaal . Uw SELECT-instructie zou er zo uit kunnen zien

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

ctid heeft het gegevenstype tid . Voorbeeld:'(0,9)'::tid

Het is echter niet stabiel als identificatie op lange termijn, sinds VACUUM of een gelijktijdige UPDATE of andere bewerkingen kunnen de fysieke locatie van een tuple op elk moment wijzigen. Voor de duur van een transactie is het echter stabiel. En als je gewoon invoegt en niets anders zou het lokaal moeten werken voor uw doel.

Ik zou een tijdstempelkolom toevoegen met de standaard now() naast de serial kolom ...

Ik zou ook een kolom standaard . laten vul je id in kolom (een serial of IDENTITY kolom). Dat haalt het nummer uit de reeks in een later stadium dan het expliciet ophalen en vervolgens invoegen, waardoor het venster voor een raceconditie wordt geminimaliseerd (maar niet geëlimineerd) - de kans dat een lagere id zou op een later tijdstip worden ingevoegd. Gedetailleerde instructies:

  • Tabelkolom automatisch verhogen


  1. Hoe de datum en tijd in SQL Server te formatteren?

  2. Hoe de UCASE()-functie werkt in MySQL

  3. Een logo toevoegen aan een formulierkoptekst in Microsoft Access

  4. sqlplus hoe details van de momenteel verbonden databasesessie te vinden