sql >> Database teknologi >  >> RDS >> PostgreSQL

5 måder at kontrollere, om der findes en tabel i PostgreSQL

Nedenfor er fem måder at kontrollere, om der findes en tabel i en PostgreSQL-database.

pg_tables Vis

pg_tables visningen indeholder oplysninger om hver tabel i databasen.

Vi kan bruge den til at kontrollere, om en given tabel findes i den aktuelle database:

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

Resultat:

True

I dette tilfælde får jeg True , hvilket betyder, at tabellen eksisterer (og jeg har adgang til den).

Afhængigt af din konfiguration kan du få t /f i stedet for True /False .

information_schema.tables Vis

information_schema.tables view indeholder alle tabeller og visninger defineret i den aktuelle database, som den aktuelle bruger har adgang til.

Vi kan bruge den til at kontrollere, om en given tabel eksisterer, og at vi har adgang til 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

En anden måde at gøre det på ville være at få optællingen:

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 være en af ​​følgende:

BASE TABLE Persistent basistabel (normal tabel)
VIEW Vis
FOREIGN Udenlandsk tabel
LOCAL TEMPORARY Midlertidig tabel

Du kan udelade table_type fra dit filter, hvis du vil kontrollere, om navnet findes på tværs af alle typer.

Systemkataloger

Systemkatalogerne er stedet, hvor en RDBMS gemmer skemametadata, såsom information om tabeller og kolonner og interne bogføringsoplysninger.

I Postgres er systemkataloger almindelige tabeller.

Vi kan bruge to af dem til at kontrollere, om en given tabel eksisterer:

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 af r er til almindelig tabel .

Du kan fjerne relkind filtrer helt, hvis du blot vil kontrollere, om et objekt allerede har det navn, du vil give til en tabel.

Eller du kan filtrere efter andre typer.

Her er mulighederne:

r almindelig tabel
i indeks
S sekvens
t TOAST bord
v visning
m materialiseret visning
c sammensat type
f fremmed tabel
p opdelt tabel
I partitioneret indeks

to_regclass() Funktion

to_regclass() funktion oversætter et tekstrelationsnavn til dets OID. Hvis navnet eksisterer, returneres OID.

Eksempel:

SELECT to_regclass('public.actor');

Resultat:

actor

Hvis tabellen ikke eksisterer, returneres NULL.

Cast til regclass

Det er også muligt at caste tabelnavnet til at skrive regclass :

SELECT 'public.actor'::regclass

Resultat:

actor

Men hvis tabellen ikke eksisterer, opstår der en fejl.

Tjek, om der allerede findes en tabel, før du opretter den

Hvis du har brug for at oprette tabellen, hvis den ikke findes, kan du bruge IF NOT EXISTS klausul i CREATE TABLE udmelding. Hvis tabellen ikke eksisterer, oprettes den. Hvis den allerede findes, bliver den ikke oprettet.

Se Opret kun en tabel, hvis den ikke findes i PostgreSQL for et eksempel.


  1. Vælg et tilfældigt udsnit af resultater fra et forespørgselsresultat

  2. Tjek, om et objekt er en primær nøgle med OBJECTPROPERTY() i SQL Server

  3. Hvordan COALESCE() virker i MariaDB

  4. Skift eller indstil MySQL Long Query Time Value for log-langsomme-forespørgsler