绑定消息提供3个参数,但准备好的语句“”需要0 [Node js,pg]

问题描述

我想像这样将参数传递给我的pg查询

    await client.query("DO\n" +
    "$do$\n" +
    "DECLARE\n" +
    "  _db TEXT := $1;\n" +
    "  _user TEXT := $2;\n" +
    "  _password TEXT := $3;\n" +
    "BEGIN\n" +
    "  CREATE EXTENSION IF NOT EXISTS dblink; -- enable extension \n" +
    "  IF EXISTS (SELECT 1 FROM pg_database WHERE datname = _db) THEN\n" +
    "    RAISE NOTICE 'Database already exists';\n" +
    "  ELSE\n" +
    "    PERFORM dblink_connect('host=localhost user=' || _user || ' password=' || _password || ' dbname=' || current_database());\n" +
    "    PERFORM dblink_exec('CREATE DATABASE ' || _db);\n" +
    "  END IF;\n" +
    "END\n" +
    "$do$",[process.env.database,process.env.user,process.env.password]);

但是我得到bind message supplies 3 parameters,but prepared statement "" requires 0。 如果不传递参数数组,则会出现there is no parameter $1错误

那么如何将参数传递给查询

解决方法

最重要的问题是,根据文档here,匿名函数DO不接受参数。这意味着提供的参数[process.env.database,process.env.user,process.env.password]无处可走,因为$ *占位符埋在函数内部。