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;

results matching ""

    No results matching ""