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

So erstellen Sie eine Tabelle nur, wenn sie in PostgreSQL nicht vorhanden ist

In PostgreSQL können Sie den IF NOT EXISTS verwenden -Klausel von CREATE TABLE -Anweisung, um zu prüfen, ob eine Tabelle mit demselben Namen bereits in der Datenbank existiert, bevor sie erstellt wird.

Die Tabelle wird nur erstellt, wenn keine andere Tabelle mit demselben Namen existiert. Existiert bereits eine Tabelle mit diesem Namen, wird anstelle eines Fehlers ein „Hinweis“ ausgegeben.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Hier t1 ist der Tabellenname, und alles zwischen den Klammern ist die Tabellendefinition (d. h. Spalten usw.).

In diesem Fall wird die Tabelle nur erstellt, wenn noch keine mit dem Namen t1 vorhanden ist .

Überprüfen Sie, ob die Tabelle jetzt existiert

Wir können die pg_tables abfragen view, um zu prüfen, ob die Tabelle jetzt existiert:

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

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 .

Versuchen Sie erneut, die Tabelle zu erstellen

Wenn wir versuchen, diese Tabelle erneut zu erstellen:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Wir erhalten keinen Fehler, sondern einen Hinweis:

NOTICE:  relation "t1" already exists, skipping

Wie erwartet teilt uns der Hinweis mit, dass die Tabelle bereits existiert.

Ohne den IF NOT EXISTS Klausel

Folgendes passiert, wenn wir IF NOT EXISTS nicht verwenden -Klausel, wenn versucht wird, eine bereits vorhandene Tabelle zu erstellen:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Dieses Mal erhalten wir einen Fehler:

ERROR:  relation "t1" already exists

Beachten Sie, dass der IF NOT EXISTS -Klausel überprüft nicht die Tabellenstruktur/-definition. Es überprüft einfach, ob es keine vorhandene Tabelle mit demselben Namen gibt, den wir der Tabelle zu geben versuchen, die wir erstellen.

Mit anderen Worten, nur weil eine Tabelle mit diesem Namen bereits existiert, bedeutet das nicht, dass sie die richtige Definition hat.

Der IF NOT EXISTS Funktionalität wurde in PostgreSQL 9.1 hinzugefügt (Versionshinweise).