sql >> Databáze >  >> RDS >> PostgreSQL

5 způsobů, jak zkontrolovat, zda tabulka v PostgreSQL existuje

Níže je pět způsobů, jak zkontrolovat, zda tabulka existuje v databázi PostgreSQL.

pg_tables Zobrazit

pg_tables zobrazení obsahuje informace o každé tabulce v databázi.

Můžeme jej použít ke kontrole, zda daná tabulka existuje v aktuální databázi:

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

Výsledek:

True

V tomto případě dostávám True , což znamená, že tabulka existuje (a mám k ní přístup).

V závislosti na vaší konfiguraci můžete získat t /f místo True /False .

information_schema.tables Zobrazit

information_schema.tables view obsahuje všechny tabulky a pohledy definované v aktuální databázi, ke kterým má aktuální uživatel přístup.

Můžeme jej použít ke kontrole, zda daná tabulka existuje a že k ní máme přístup:

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

Výsledek:

True

Dalším způsobem, jak to udělat, by bylo získat počet:

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

Výsledek:

1

table_type může být jedna z následujících:

BASE TABLE Trvalá základní tabulka (normální tabulka)
VIEW Zobrazit
FOREIGN Zahraniční tabulka
LOCAL TEMPORARY Dočasný stůl

table_type můžete vynechat z vašeho filtru, pokud chcete zkontrolovat, zda název existuje u všech typů.

Systémové katalogy

Systémové katalogy jsou místem, kde RDBMS ukládá metadata schémat, jako jsou informace o tabulkách a sloupcích a informace o interním účetnictví.

V Postgresu jsou systémové katalogy běžné tabulky.

Můžeme použít dva z nich ke kontrole, zda daná tabulka existuje:

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

Výsledek:

True

relkind z r je pro běžný stůl .

Můžete odstranit relkind filtr úplně, pokud chcete jednoduše zkontrolovat, zda objekt již má název, který chcete dát tabulce.

Nebo můžete filtrovat podle jiných typů.

Zde jsou možnosti:

r běžná tabulka
i index
S sekvence
t Tabulka TOAST
v zobrazit
m materializované zobrazení
c složený typ
f cizí tabulka
p rozdělená tabulka
I rozdělený index

to_regclass() Funkce

to_regclass() funkce přeloží název textového vztahu na jeho OID. Pokud název existuje, vrátí se OID.

Příklad:

SELECT to_regclass('public.actor');

Výsledek:

actor

Pokud tabulka neexistuje, vrátí se NULL.

Odesílání do regclass

Je také možné přetypovat název tabulky na typ regclass :

SELECT 'public.actor'::regclass

Výsledek:

actor

Pokud však tabulka neexistuje, dojde k chybě.

Před jejím vytvořením zkontrolujte, zda tabulka již existuje

Pokud potřebujete vytvořit tabulku, pokud neexistuje, můžete použít IF NOT EXISTS klauzule CREATE TABLE prohlášení. Pokud tabulka neexistuje, bude vytvořena. Pokud již existuje, nebude vytvořen.

Příklad viz Vytvoření tabulky pouze v případě, že v PostgreSQL neexistuje.


  1. SQL se připojí

  2. kopírování z jedné databáze do druhé pomocí vývojáře Oracle SQL - připojení se nezdařilo

  3. Nainstalujte Postgres.app na Mac

  4. Oracle PL/SQL – kolekce (vnořené tabulky)