Я хочу передать параметры моему запросу 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
.
Итак, как я могу передать параметры моему запросу?
DO
не принимает параметры.$*
скрыты внутриDO
, ваш[process.env.database, process.env.user, process.env.password]
не имеет к ним доступа, отсюда и сообщение об ошибке. Вам понадобится что-то вроде правильной функции (db, user, pwd), в которую вы могли бы передать параметры. Не очень хорошо знаюpg
, но не могли бы вы построитьdb TEXT := $1;\n"
какdb TEXT := process.env.database ;\n"
? - person Adrian Klaver   schedule 18.10.2020_db TEXT := '${process.env.database}';
Вы можете написать ответ, чтоDO
не принимает параметров, и я отмечу его как правильный. - person GorgeousPuree   schedule 18.10.2020