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

5 sposobów na sprawdzenie, czy tabela istnieje w PostgreSQL

Poniżej znajduje się pięć sposobów sprawdzenia, czy tabela istnieje w bazie danych PostgreSQL.

pg_tables Zobacz

pg_tables widok zawiera informacje o każdej tabeli w bazie danych.

Możemy go użyć do sprawdzenia, czy dana tabela istnieje w bieżącej bazie danych:

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

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 .

information_schema.tables Zobacz

information_schema.tables widok zawiera wszystkie tabele i widoki zdefiniowane w bieżącej bazie danych, do których bieżący użytkownik ma dostęp.

Za jego pomocą możemy sprawdzić, czy dana tabela istnieje i czy mamy do niej dostęp:

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

Wynik:

True

Innym sposobem na to byłoby uzyskanie wyniku:

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

Wynik:

1

table_type może być jednym z następujących:

BASE TABLE Stała tabela podstawowa (normalna tabela)
VIEW Widok
FOREIGN Obcy stół
LOCAL TEMPORARY Tabela tymczasowa

Możesz pominąć table_type z filtra, jeśli chcesz sprawdzić, czy nazwa istnieje we wszystkich typach.

Katalogi systemowe

Katalogi systemowe to miejsce, w którym RDBMS przechowuje metadane schematu, takie jak informacje o tabelach i kolumnach oraz wewnętrzne informacje księgowe.

W Postgres katalogi systemowe to zwykłe tabele.

Możemy użyć dwóch z nich, aby sprawdzić, czy dana tabela istnieje:

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'
    );

Wynik:

True

relkind z r dotyczy zwykłego stołu .

Możesz usunąć relkind filtruj całkowicie, jeśli chcesz po prostu sprawdzić, czy obiekt ma już nazwę, którą chcesz nadać tabeli.

Możesz też filtrować według innych typów.

Oto opcje:

r zwykła tabela
i indeks
S sekwencja
t Stół TOSTY
v widok
m widok zmaterializowany
c typ złożony
f obcy stół
p partycjonowana tabela
I partycjonowany indeks

to_regclass() Funkcja

to_regclass() funkcja tłumaczy nazwę relacji tekstowej na jej OID. Jeśli nazwa istnieje, zwracany jest OID.

Przykład:

SELECT to_regclass('public.actor');

Wynik:

actor

Jeśli tabela nie istnieje, zwracana jest wartość NULL.

Przesyłaj do regclass

Możliwe jest również rzutowanie nazwy tabeli na typ regclass :

SELECT 'public.actor'::regclass

Wynik:

actor

Jeśli jednak tabela nie istnieje, pojawia się błąd.

Sprawdź, czy tabela już istnieje przed jej utworzeniem

Jeśli potrzebujesz utworzyć tabelę, jeśli nie istnieje, możesz użyć IF NOT EXISTS klauzula CREATE TABLE oświadczenie. Jeśli tabela nie istnieje, zostanie utworzona. Jeśli już istnieje, nie zostanie utworzony.

Zobacz Tworzenie tabeli tylko wtedy, gdy nie istnieje w PostgreSQL jako przykład.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj połączenia PostgreSQL SSL w rdzy z certyfikatami z podpisem własnym

  2. Przegląd nowych procedur składowanych w PostgreSQL 11

  3. postgresql date_trunc do dowolnej precyzji?

  4. Klauzula Go i IN w Postgres

  5. Jak przenieść bazę danych PostgreSQL do bazy SQLServer?