W PostgreSQL możesz użyć IF NOT EXISTS
klauzula CREATE TABLE
oświadczenie, aby sprawdzić, czy tabela o tej samej nazwie już istnieje w bazie danych przed jej utworzeniem.
Tabela zostanie utworzona tylko wtedy, gdy nie będzie innej tabeli o tej samej nazwie. Jeśli tabela o tej nazwie już istnieje, zamiast błędu zostanie wyświetlone „powiadomienie”.
Przykład
Oto przykład do zademonstrowania:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Tutaj, t1
to nazwa tabeli, a wszystko w nawiasach to definicja tabeli (tj. kolumny itp.).
W takim przypadku tabela zostanie utworzona tylko wtedy, gdy nie istnieje jeszcze jedna o nazwie t1
.
Sprawdź, czy tabela już istnieje
Możemy wysłać zapytanie do pg_tables
widok, aby sprawdzić, czy tabela już istnieje:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
Wynik:
True
W tym przypadku otrzymuję True
, co oznacza, że tabela istnieje i mam do niej dostęp.
W zależności od konfiguracji możesz otrzymać t
/f
zamiast True
/False
.
Spróbuj ponownie utworzyć stół
Jeśli spróbujemy ponownie utworzyć tę tabelę:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Nie pojawia się błąd, otrzymujemy powiadomienie:
NOTICE: relation "t1" already exists, skipping
Zgodnie z oczekiwaniami powiadomienie informuje nas, że stół już istnieje.
Bez IF NOT EXISTS
Klauzula
Oto, co się dzieje, gdy nie używamy IF NOT EXISTS
klauzula podczas próby utworzenia tabeli, która już istnieje:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Tym razem pojawia się błąd:
ERROR: relation "t1" already exists
Zauważ, że IF NOT EXISTS
klauzula nie sprawdza struktury/definicji tabeli. Po prostu sprawdza, czy nie istnieje tabela o tej samej nazwie, którą próbujemy nadać tabeli, którą tworzymy.
Innymi słowy, tylko dlatego, że tabela o tej nazwie już istnieje, nie oznacza to, że ma poprawną definicję.
IF NOT EXISTS
funkcjonalność została dodana w PostgreSQL 9.1 (informacje o wydaniu).