Postgres 更新表(仅)如果它存在

Dom*_*nas 12 postgresql

我有一个服务器和几个客户端应用程序。必须先启动服务器,然后才能启动客户端。如果它们不存在,客户端然后在数据库中创建表。

当服务器启动时(某些表不存在)并且以下查询给了我一个exception

UPDATE recipes SET lock = null 
WHERE lock IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

Relation >>recipes<< does not exists

我想exception通过检查此表是否存在来避免这种情况。

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'
   );
Run Code Online (Sandbox Code Playgroud)

但这query不起作用。你能告诉我我的错误在哪里吗?

ype*_*eᵀᴹ 15

您需要一个 pl/pgsql 块来执行以下操作IF

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
   $$ ;
Run Code Online (Sandbox Code Playgroud)