PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

5 Möglichkeiten, um zu überprüfen, ob eine Tabelle in PostgreSQL existiert

Im Folgenden finden Sie fünf Möglichkeiten, um zu überprüfen, ob eine Tabelle in einer PostgreSQL-Datenbank vorhanden ist.

Die pg_tables Anzeigen

Die pg_tables view enthält Informationen über jede Tabelle in der Datenbank.

Wir können damit prüfen, ob eine bestimmte Tabelle in der aktuellen Datenbank existiert:

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

Ergebnis:

True

In diesem Fall bekomme ich True , was bedeutet, dass die Tabelle existiert (und ich Zugriff darauf habe).

Abhängig von Ihrer Konfiguration erhalten Sie möglicherweise t /f statt True /False .

Die information_schema.tables Anzeigen

Die information_schema.tables view enthält alle in der aktuellen Datenbank definierten Tabellen und Ansichten, auf die der aktuelle Benutzer Zugriff hat.

Wir können es verwenden, um zu überprüfen, ob eine bestimmte Tabelle existiert und ob wir Zugriff darauf haben:

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

Ergebnis:

True

Eine andere Möglichkeit wäre, die Anzahl zu ermitteln:

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

Ergebnis:

1

Der table_type kann einer der folgenden sein:

BASE TABLE Persistente Basistabelle (normale Tabelle)
VIEW Anzeigen
FOREIGN Fremdtisch
LOCAL TEMPORARY Temporäre Tabelle

Sie können table_type weglassen aus Ihrem Filter, wenn Sie prüfen möchten, ob der Name über alle Typen hinweg existiert.

Systemkataloge

Die Systemkataloge sind der Ort, an dem ein RDBMS Schema-Metadaten wie Informationen zu Tabellen und Spalten sowie interne Buchhaltungsinformationen speichert.

In Postgres sind Systemkataloge reguläre Tabellen.

Wir können zwei davon verwenden, um zu prüfen, ob eine bestimmte Tabelle existiert:

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

Ergebnis:

True

Das relkind von r ist für gewöhnlichen Tisch .

Sie können das relkind entfernen ganz filtern, wenn Sie nur prüfen möchten, ob ein Objekt bereits den Namen hat, den Sie einer Tabelle geben möchten.

Oder Sie können nach anderen Typen filtern.

Hier sind die Optionen:

r gewöhnlicher Tisch
i Index
S Reihenfolge
t TOAST-Tabelle
v ansehen
m materialisierte Ansicht
c zusammengesetzter Typ
f fremde Tabelle
p partitionierte Tabelle
I partitionierter Index

Der to_regclass() Funktion

Die to_regclass() Funktion übersetzt einen textuellen Beziehungsnamen in seine OID. Wenn der Name existiert, wird die OID zurückgegeben.

Beispiel:

SELECT to_regclass('public.actor');

Ergebnis:

actor

Wenn die Tabelle nicht existiert, wird NULL zurückgegeben.

In regclass umwandeln

Es ist auch möglich, den Tabellennamen in den Typ regclass umzuwandeln :

SELECT 'public.actor'::regclass

Ergebnis:

actor

Wenn die Tabelle jedoch nicht existiert, tritt ein Fehler auf.

Überprüfen Sie, ob eine Tabelle bereits existiert, bevor Sie sie erstellen

Wenn Sie die Tabelle erstellen müssen, wenn sie nicht existiert, können Sie den IF NOT EXISTS verwenden -Klausel von CREATE TABLE Erklärung. Wenn die Tabelle nicht existiert, wird sie erstellt. Wenn es bereits existiert, wird es nicht erstellt.

Ein Beispiel finden Sie unter Tabelle nur erstellen, wenn sie in PostgreSQL nicht vorhanden ist.