sql >> Databáze >  >> RDS >> PostgreSQL

Generování sekvence v pořadí

Ne. Protože neexistuje žádný přirozený řád řádků v databázové tabulce, vše, s čím musíte pracovat, jsou hodnoty ve vaší tabulce.

Existují sloupce cmin specifické pro systém Postgres a ctid mohli zneužívání do určité míry.

ID n-tice (ctid ) obsahuje číslo bloku souboru a pozici v bloku pro řádek. To tedy představuje aktuální fyzické uspořádání na disku. Pozdější přídavky budou mít větší ctid , normálně . Váš příkaz SELECT může vypadat takto

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

ctid má datový typ tid . Příklad:'(0,9)'::tid

Není však stabilní jako dlouhodobý identifikátor, od VACUUM nebo jakékoli souběžné UPDATE nebo některé další operace mohou kdykoli změnit fyzické umístění n-tice. Po dobu trvání transakce je však stabilní. A pokud právě vkládáte a nic jinak by to mělo fungovat lokálně pro váš účel.

Přidal bych sloupec časového razítka s výchozím now() kromě serial sloupec ...

Také bych nechal výchozí sloupec vyplňte své id sloupec (serial nebo IDENTITY sloupec). To načte číslo ze sekvence v pozdější fázi, než je explicitně načíst a poté jej vložit, čímž se minimalizuje (ale ne eliminuje) okno pro spor – pravděpodobnost, že nižší id bude vložen později. Podrobné pokyny:

  • Automaticky zvyšovat sloupec tabulky


  1. Příklad funkce Oracle k získání počtu dní mezi dvěma daty

  2. Kód VBA pro přidání propojené tabulky s primárním klíčem

  3. Jak přesunout soubor z jednoho adresáře do druhého pomocí PL SQL

  4. Jak nakonfigurovat zvýraznění syntaxe v SQLcl