PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да създадете таблица само ако тя не съществува в PostgreSQL

В PostgreSQL можете да използвате IF NOT EXISTS клауза на CREATE TABLE оператор, за да проверите дали таблица със същото име вече съществува в базата данни, преди да я създадете.

Таблицата ще бъде създадена само ако не съществува друга таблица със същото име. Ако вече съществува таблица с това име, вместо грешка ще бъде издадено „известие“.

Пример

Ето пример за демонстрация:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Тук t1 е името на таблицата, а всичко между скобите е дефиницията на таблицата (т.е. колони и т.н.).

В този случай таблицата ще бъде създадена само ако вече няма такава, наречена t1 .

Проверете дали таблицата вече съществува

Можем да потърсим pg_tables преглед, за да проверите дали таблицата вече съществува:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Резултат:

True

В този случай получавам True , което означава, че таблицата съществува и че имам достъп до нея.

В зависимост от вашата конфигурация може да получите t /f вместо True /False .

Опитайте да създадете таблицата отново

Ако се опитаме да създадем тази таблица отново:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Не получаваме грешка, получаваме известие:

NOTICE:  relation "t1" already exists, skipping

Както се очакваше, известието ни казва, че таблицата вече съществува.

Без IF NOT EXISTS Клауза

Ето какво се случва, когато не използваме IF NOT EXISTS клауза, когато се опитвате да създадете таблица, която вече съществува:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Този път получаваме грешка:

ERROR:  relation "t1" already exists

Имайте предвид, че IF NOT EXISTS клаузата не проверява структурата/дефиницията на таблицата. Той просто проверява дали няма съществуваща таблица със същото име, която се опитваме да дадем на таблицата, която създаваме.

С други думи, само защото таблица с това име вече съществува, това не означава, че има правилната дефиниция.

IF NOT EXISTS функционалността беше добавена в PostgreSQL 9.1 (бележки по версията).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли изчакване за неактивни PostgreSQL връзки?

  2. Как работи make_timestamptz() в PostgreSQL

  3. Проверка на вашите PostgreSQL архиви в Docker

  4. Как да отмените завъртане на таблица в PostgreSQL

  5. Актуализация на версията на Docker PGMASTER PostgreSQL