Postgres 9.5 nebo novější
IF NOT EXISTS
byl přidán do CREATE SEQUENCE
v Postgresu 9.5. To je nyní jednoduché řešení:
CREATE SEQUENCE IF NOT EXISTS myschema.myseq;
Ale přesto zvažte podrobnosti zastaralé odpovědi ...
A víte o serial
nebo IDENTITY
sloupce, že?
- Automaticky zvyšovat sloupec tabulky
Postgres 9.4 nebo starší
Sekvence sdílejí jmenný prostor s několika dalšími objekty podobnými tabulkám. Manuál:
Název sekvence se musí lišit od názvu jakékoli jinésekvence, tabulky, indexu, pohledu nebo cizí tabulky ve stejném schématu.
Odvážný důraz můj. Takže existují tři případy:
- Jméno neexistuje. -> Vytvořit sekvenci.
- Existuje sekvence se stejným názvem. -> Nedělat nic? Nějaký výstup? Nějaké protokolování?
- Existuje jiný konfliktní objekt se stejným názvem. -> Udělat něco? Nějaký výstup? Nějaké protokolování?
Určete, co dělat v obou případech. DO
výpis může vypadat takto:
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$;
Typy objektů (relkind
) v pg_class
podle manuálu:
r =běžná tabulka
i =index
S =sekvence
v =pohled
m =materializovaný pohled
c =složený typ
t =tabulka TOAST
f =cizí tabulka
Související:
- Jak zkontrolovat, zda tabulka v daném schématu existuje