Postgres 9.5 of hoger
IF NOT EXISTS
is toegevoegd aan CREATE SEQUENCE
in Postgres 9.5. Dat is nu de simpele oplossing:
CREATE SEQUENCE IF NOT EXISTS myschema.myseq;
Maar overweeg hoe dan ook details van het verouderde antwoord ...
En je weet van serial
of IDENTITY
kolommen, toch?
- Tabelkolom automatisch verhogen
Postgres 9.4 of ouder
Sequenties delen de naamruimte met verschillende andere tabelachtige objecten. De handleiding:
De naam van de reeks moet verschillend zijn van de naam van een anderereeks, tabel, index, weergave of vreemde tabel in hetzelfde schema.
Vetgedrukte nadruk van mij. Er zijn dus drie gevallen:
- Naam bestaat niet. -> Reeks maken.
- Er bestaat een reeks met dezelfde naam. -> Niets doen? Enige uitvoer? Logboekregistratie?
- Er bestaat een ander conflicterend object met dezelfde naam. -> Iets doen? Enige uitvoer? Logboekregistratie?
Geef aan wat u in beide gevallen moet doen. Een DO
verklaring kan er als volgt uitzien:
DO
$do$
DECLARE
_kind "char";
BEGIN
SELECT relkind
FROM pg_class
WHERE oid = 'myschema.myseq'::regclass -- sequence name, optionally schema-qualified
INTO _kind;
IF NOT FOUND THEN -- name is free
CREATE SEQUENCE myschema.myseq;
ELSIF _kind = 'S' THEN -- sequence exists
-- do nothing?
ELSE -- object name exists for different kind
-- do something!
END IF;
END
$do$;
Objecttypen (relkind
) in pg_class
volgens de handleiding:
r =gewone tabel
i =index
S =volgorde
v =weergave
m =gematerialiseerde weergave
c =samengesteld type
t =TOAST-tabel
f =buitenlandse tabel
Gerelateerd:
- Hoe te controleren of een tabel in een bepaald schema bestaat