PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak utworzyć tabelę tylko wtedy, gdy nie istnieje w PostgreSQL

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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa funkcja Setseed() w PostgreSQL

  2. Wyświetlanie i przełączanie baz danych w PostgreSQL

  3. Użyj zmiennej ustawionej przez meta-polecenie psql wewnątrz bloku DO

  4. Dlaczego PostgreSQL połączył użytkowników i grupy w role?

  5. jak obliczyć salda w programie księgowym za pomocą funkcji okna postgres