sql >> Databasteknik >  >> RDS >> PostgreSQL

5 sätt att kontrollera om en tabell finns i PostgreSQL

Nedan finns fem sätt att kontrollera om en tabell finns i en PostgreSQL-databas.

pg_tables Visa

pg_tables vyn innehåller information om varje tabell i databasen.

Vi kan använda den för att kontrollera om en given tabell finns i den aktuella databasen:

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

Resultat:

True

I det här fallet får jag True , vilket betyder att tabellen existerar (och jag har tillgång till den).

Beroende på din konfiguration kan du få t /f istället för True /False .

information_schema.tables Visa

information_schema.tables vyn innehåller alla tabeller och vyer definierade i den aktuella databasen som den aktuella användaren har tillgång till.

Vi kan använda den för att kontrollera om en given tabell finns och att vi har tillgång till den:

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

Resultat:

True

Ett annat sätt att göra det skulle vara att få räkningen:

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

Resultat:

1

table_type kan vara något av följande:

BASE TABLE Beständig bastabell (normal tabell)
VIEW Visa
FOREIGN Utländsk tabell
LOCAL TEMPORARY Tillfällig tabell

Du kan utelämna table_type från ditt filter om du vill kontrollera om namnet finns för alla typer.

Systemkataloger

Systemkatalogerna är platsen där en RDBMS lagrar schemametadata, såsom information om tabeller och kolumner, och intern bokföringsinformation.

I Postgres är systemkataloger vanliga tabeller.

Vi kan använda två av dem för att kontrollera om en given tabell finns:

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

Resultat:

True

relkind av r är för vanligt bord .

Du kan ta bort relkind filtrera helt om du bara vill kontrollera om ett objekt redan har det namn som du vill ge till en tabell eller inte.

Eller så kan du filtrera efter andra typer.

Här är alternativen:

r vanligt bord
i index
S sekvens
t TOAST-bord
v vy
m materialiserad vy
c sammansatt typ
f utländsk tabell
p partitionerad tabell
I partitionerat index

to_regclass() Funktion

to_regclass() funktion översätter ett textrelationsnamn till dess OID. Om namnet finns returneras OID.

Exempel:

SELECT to_regclass('public.actor');

Resultat:

actor

Om tabellen inte finns returneras NULL.

Casta till regclass

Det är också möjligt att casta tabellnamnet till typ regclass :

SELECT 'public.actor'::regclass

Resultat:

actor

Men om tabellen inte finns, uppstår ett fel.

Kontrollera om en tabell redan finns innan du skapar den

Om du behöver skapa tabellen om den inte finns kan du använda IF NOT EXISTS satsen i CREATE TABLE påstående. Om tabellen inte finns skapas den. Om den redan finns skapas den inte.

Se Skapa en tabell endast om den inte finns i PostgreSQL för ett exempel.


  1. SQLite Left Join

  2. Vad är en frågeavvikare och hur man åtgärdar det

  3. Använda ett alias i SQL-beräkningar

  4. RODBC Temporary Table Issue vid anslutning till MS SQL Server