Я пытаюсь воссоздать несколько баз данных и пользователей, выполняющих файл SQL через psql.exe.И я не хочу переходить на createuser
и подобные инструменты.
Вот мой входной файл для psql
.Я намеренно изменил LANGUAGE
на несуществующий PSQL
, чтобы подчеркнуть, что я пытаюсь запустить его, используя psql
(из командного файла).Это немного псевдокод, но вы поняли.Языки SQL или pgplsql ничего не решают, ошибка та же: postgres использует username
в качестве значения REASSIGN OWNED
вместо user456
.
CREATE OR REPLACE PROCEDURE create_database_and_user(
dbName character varying,
username character varying,
password character varying)
AS $$
REASSIGN OWNED BY username TO postgres;
DROP OWNED BY username;
-- ...other statements...
\connect "dbname=${dbName} user=${username} password=${password}"
$$ LANGUAGE PSQL;
CALL create_database_and_user('db123', 'user456', 'p@ss');
Не работает
psql:./initdb.sql:14: ERROR: language "psql" does not exist
psql:./initdb.sql:17: ERROR: role "username" does not exist
CONTEXT: SQL function "create_database_and_user" statement 1