sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan opretter du en sekvens, hvis den ikke eksisterer

Postgres 9.5 eller nyere

IF NOT EXISTS blev tilføjet til CREATE SEQUENCE i Postgres 9.5. Det er den enkle løsning nu:

CREATE SEQUENCE IF NOT EXISTS myschema.myseq;

Men overvej detaljerne i det forældede svar alligevel ...
Og du kender til serial eller IDENTITY kolonner, ikke?

  • Automatisk stigning i tabelkolonnen

Postgres 9.4 eller ældre

Sekvenser deler navnerummet med flere andre tabellignende objekter. Manualen:

Sekvensnavnet skal være forskelligt fra navnet på enhver andensekvens, tabel, indeks, visning eller fremmed tabel i samme skema.

Fed fremhævelse min. Så der er tre tilfælde:

  1. Navnet findes ikke. -> Opret sekvens.
  2. Der findes en sekvens med samme navn. -> Gør du ingenting? Noget output? Nogen logning?
  3. Der findes et andet modstridende objekt med samme navn. -> Gøre noget? Noget output? Nogen logning?

Angiv, hvad du skal gøre i begge tilfælde. En DO sætning kunne se sådan ud:

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$;

Objekttyper (relkind ) i pg_class ifølge manualen:

r =almindelig tabel
i =indeks
S =sekvens
v =udsigt
m =materialiseret visning
c =sammensat type
t =TOAST-bord
f =fremmed tabel

Relateret:

  • Sådan kontrollerer du, om en tabel findes i et givet skema


  1. Sådan fungerer WEEKOFYEAR() i MariaDB

  2. hvordan man laver en tabel i oracle

  3. 1052:Kolonne 'id' i feltlisten er tvetydig

  4. Forkert heltal (2147483647) er indsat i MySQL?