sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man anger värdelista för en postgresql-sekvens

Skulle kunna fungera så här:

-- DROP SCHEMA x CASCADE;
CREATE SCHEMA x;
CREATE TABLE x.priv_id(seq_id int primary key, id int);

INSERT INTO x.priv_id
SELECT generate_series(1,100,1), (random() * 1000)::int;

CREATE SEQUENCE x.priv_seq;

SELECT id
FROM   x.priv_id
WHERE  seq_id = (SELECT nextval('x.priv_seq'));

Huvudpunkter:

1) Skapa en uppslagstabell med två siffror
- seq_id räknas från 1 och din primära nyckel.
- id är dina nummer i följd (jag har ersatt slumpmässiga nummer här).
2) Skapa en hjälpsekvens.
3) Få dina nummer med ett SELECT som ovan.
Du behöver undervalet, eller alla värden kommer att returneras på en gång.

Denna lösning ger all säkerhet nextval() har att erbjuda för samtidighet.
Skapa ett unikt index på priv_id(id) om du vill försäkra dig om att dina anpassade id:n är unika.



  1. hur man sammanfogar 2 bord

  2. Varför fungerar inte detta regex i postgreSQL

  3. Hur dyra är JOINs i SQL? Och/eller, vad är avvägningen mellan prestanda och normalisering?

  4. Överbrygga RDBMS och NoSQL:Introduktion till 2DX UI-kluster