Sequences
PostgreSQL understøtter sequences (trækning af numre) - med følgende egenskaber:
- Increment value (normalt 1)
- Startværdi (det til enhver tid gældende næste nummer, der bliver trukket
CREATE SEQUENCE serial START 1;
Trækning af værdier fra en sequence:
SELECT nextval('serial');
Datatypen serial (IKKE EN ÆGTE DATATYPE) anvender sequences
Kommandoen:
CREATE TABLE tab (id SERIAL);
er ækvivalent med:
CREATE SEQUENCE tab_id_seq;
CREATE TABLE tab (col integer NOT NULL DEFAULT nextval('tablename_colname_seq');
ALTER SEQUENCE tab_id_seq OWNED BY tab.col;
Værdien af en sequence kan sættes explicit med setval funktionen. F.eks.:
SELECT setval('tab_id_seq', SELECT MAX(col) FROM table));
eller nulstilles med reset (godt hvis man har ryddet tabellen)
ALTER SEQUENCE tab_id_seq RESTART;
Man kan også lave mere avancerede sequences, fx.
CREATE SEQUENCE nedtaelling
INCREMENT BY -10
MINVALUE 0
MAXVALUE 100
START WITH 100
CYCLE;
Et eksempel på noget semi-brugbart:
CREATE TABLE deltagere (
id serial PRIMARY KEY,
navn text NOT NULL,
gruppe smallint
);
INSERT INTO deltagere(navn)
VALUES
('Jesper'),
('Camilla'),
('Peter T'),
('Vibeke'),
('Patrick'),
('Berit'),
('Peter J'),
('Lars'),
('Roman');
CREATE SEQUENCE gruppe START WITH 1 MAXVALUE 3 CYCLE;
UPDATE deltagere SET gruppe = nextval('gruppe');
SELECT gruppe, string_agg(navn, ', ') FROM deltagere GROUP BY gruppe;