it-swarm.com.de

Postgres aktualisiert eine Tabelle (nur), wenn sie existiert

Ich habe einen Server und mehrere Client-Anwendungen. Der Server muss gestartet werden, bevor ein Client gestartet werden kann. Die Clients erstellen dann Tabellen in der Datenbank, wenn sie nicht vorhanden sind.

Wenn der Server gestartet wird (einige Tabellen existieren nicht) und die folgende Abfrage mir ein exception gibt:

UPDATE recipes SET lock = null 
WHERE lock IS NOT NULL;

Relation >>recipes<< does not exists

Ich möchte dieses exception vermeiden, indem ich überprüfe, ob diese Tabelle existiert oder nicht.

UPDATE recipes SET lock = null
WHERE lock IS NOT NULL AND
WHERE EXISTS (
   SELECT 1
   FROM   information_schema.tables 
   WHERE  table_schema = 'public'
   AND    table_name = 'recipes'
   );

Aber dieses query funktioniert nicht. Kannst du mir sagen, wo mein Fehler ist?

4
Dominic Jonas

Sie benötigen einen pl/pgsql-Block, um IF auszuführen:

DO $$                  
    BEGIN 
        IF EXISTS
            ( SELECT 1
              FROM   information_schema.tables 
              WHERE  table_schema = 'public'
              AND    table_name = 'recipes'
            )
        THEN
            UPDATE recipes 
            SET lock = NULL
            WHERE lock IS NOT NULL ;
        END IF ;
    END
   $$ ;
9
ypercubeᵀᴹ
CREATE TABLE IF NOT EXISTS recipes (... ) 

Und weiter mit dem Update ...

siehe https://stackoverflow.com/questions/1766046/postgresql-create-table-if-not-exists

0
simplexio