V PostgreSQL můžete použít IF NOT EXISTS
klauzule CREATE TABLE
pro kontrolu, zda stejnojmenná tabulka již v databázi existuje, než ji vytvoříte.
Tabulka bude vytvořena pouze v případě, že žádná jiná tabulka se stejným názvem neexistuje. Pokud tabulka s tímto názvem již existuje, místo chyby se zobrazí „upozornění“.
Příklad
Zde je příklad k demonstraci:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Zde t1
je název tabulky a vše v závorkách je definice tabulky (tj. sloupce atd.).
V takovém případě bude tabulka vytvořena pouze v případě, že již neexistuje žádná s názvem t1
.
Zkontrolujte, zda tabulka nyní existuje
Můžeme se dotazovat na pg_tables
zobrazit a zkontrolovat, zda tabulka nyní existuje:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
Výsledek:
True
V tomto případě dostávám True
, což znamená, že tabulka existuje a že k ní mám přístup.
V závislosti na vaší konfiguraci můžete získat t
/f
místo True
/False
.
Zkuste znovu vytvořit tabulku
Pokud se pokusíme vytvořit tuto tabulku znovu:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Nezobrazí se nám chyba, ale upozornění:
NOTICE: relation "t1" already exists, skipping
Jak se dalo očekávat, oznámení nám říká, že tabulka již existuje.
Bez IF NOT EXISTS
Ustanovení
Co se stane, když nepoužijeme IF NOT EXISTS
klauzule při pokusu o vytvoření tabulky, která již existuje:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Tentokrát se zobrazí chyba:
ERROR: relation "t1" already exists
Všimněte si, že IF NOT EXISTS
klauzule nekontroluje strukturu/definici tabulky. Jednoduše zkontroluje, že neexistuje žádná existující tabulka se stejným názvem, který se pokoušíme dát tabulce, kterou vytváříme.
Jinými slovy, to, že tabulka s tímto názvem již existuje, neznamená, že má správnou definici.
IF NOT EXISTS
funkce byla přidána do PostgreSQL 9.1 (poznámky k vydání).