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

5 начина да проверите дали таблица съществува в PostgreSQL

По-долу са дадени пет начина да проверите дали таблица съществува в PostgreSQL база данни.

pg_tables Преглед

pg_tables изгледът съдържа информация за всяка таблица в базата данни.

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

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

Резултат:

True

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

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

information_schema.tables Преглед

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

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

SELECT EXISTS (
    SELECT FROM 
        information_schema.tables 
    WHERE 
        table_schema LIKE 'public' AND 
        table_type LIKE 'BASE TABLE' AND
        table_name = 'actor'
    );

Резултат:

True

Друг начин да го направите е да получите броя:

SELECT 
    COUNT(table_name)
FROM 
    information_schema.tables 
WHERE 
    table_schema LIKE 'public' AND 
    table_type LIKE 'BASE TABLE' AND
	table_name = 'actor';

Резултат:

1

table_type може да бъде едно от следните:

BASE TABLE Постоянна основна таблица (нормална таблица)
VIEW Преглед
FOREIGN Чужда таблица
LOCAL TEMPORARY Временна таблица

Можете да пропуснете table_type от вашия филтър, ако искате да проверите дали името съществува във всички типове.

Системни каталози

Системните каталози са мястото, където RDBMS съхранява метаданни на схемата, като информация за таблици и колони и информация за вътрешно счетоводство.

В Postgres системните каталози са обикновени таблици.

Можем да използваме две от тях, за да проверим дали дадена таблица съществува:

SELECT EXISTS (
    SELECT FROM 
        pg_catalog.pg_class c
    JOIN 
        pg_catalog.pg_namespace n ON 
        n.oid = c.relnamespace
    WHERE  
        n.nspname = 'public' AND 
        c.relname = 'actor' AND 
        c.relkind = 'r'
    );

Резултат:

True

relkind на r е за обикновена маса .

Можете да премахнете relkind филтрирайте изцяло, ако просто искате да проверите дали даден обект вече има името, което искате да дадете на таблица.

Или можете да филтрирате по други типове.

Ето опциите:

r обикновена маса
i индекс
S последователност
t Таблица TOAST
v преглед
m материализиран изглед
c съставен тип
f чужда таблица
p разделена таблица
I разделен индекс

to_regclass() Функция

to_regclass() функцията превежда име на текстова връзка в нейния OID. Ако името съществува, OID се връща.

Пример:

SELECT to_regclass('public.actor');

Резултат:

actor

Ако таблицата не съществува, се връща NULL.

Прехвърляне към regclass

Също така е възможно името на таблицата да се прехвърли, за да въведете regclass :

SELECT 'public.actor'::regclass

Резултат:

actor

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

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

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

Вижте Създаване на таблица само ако тя не съществува в PostgreSQL за пример.


  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 за C++

  2. Как да попречите на PDO да тълкува въпросителния знак като заместител?

  3. Как Div() работи в PostgreSQL

  4. fe_sendauth:не е предоставена парола

  5. Вземете първия ден от месеца в PostgreSQL