CREATE DATABASE не может работать внутри блока транзакции в pgadmin 4 - PullRequest
2 голосов
/ 09 марта 2020

Я пытаюсь запустить скрипт в pgAdmin 4, но я получаю эту ошибку:

CREATE DATABASE cannot run inside a transaction block

И это скрипт:

CREATE USER ky_auth WITH PASSWORD 'ky_auth';
COMMENT ON ROLE ky_auth IS 'KnowYourself Auth Database User';
CREATE DATABASE ky_auth WITH OWNER = ky_auth;
COMMENT ON DATABASE ky_auth IS 'KnowYourself Auth Database';

CREATE USER ky_pers WITH PASSWORD 'ky_pers';
COMMENT ON ROLE ky_pers IS 'KnowYourself Personal Database User';
CREATE DATABASE ky_pers WITH OWNER = ky_pers;
COMMENT ON DATABASE ky_pers IS 'KnowYourself Personal Database';

CREATE USER ky_oper WITH PASSWORD 'ky_oper';
COMMENT ON ROLE ky_oper IS 'KnowYourself Operational Database User';
CREATE DATABASE ky_oper WITH OWNER = ky_oper;
COMMENT ON DATABASE ky_oper IS 'KnowYourself Operational Database';

CREATE USER knowyourself_tests WITH PASSWORD 'ky_tests' CREATEDB;
COMMENT ON ROLE knowyourself_tests IS 'KnowYourself Integration Tests Database User';

Так что я должен изменить ?

Спасибо

и если поставить это выше сценария:

SET AUTOCOMMIT = ON

Тогда я получу эту ошибку:

 unrecognized configuration parameter "autocommit"

, если я сделаю это :

CREATE USER ky_auth WITH PASSWORD 'ky_auth';
COMMENT ON ROLE ky_auth IS 'KnowYourself Auth Database User';

тогда это удастся. но потом, если я сделаю это:


CREATE DATABASE ky_auth WITH OWNER = ky_auth;
COMMENT ON DATABASE ky_auth IS 'KnowYourself Auth Database';

я получу эту ошибку:

ERROR:  CREATE DATABASE cannot run inside a transaction block

1 Ответ

1 голос
/ 09 марта 2020

Если в вашем скрипте нигде нет BEGIN; или START TRANSACTION;, то pgAdmin должен отправить весь ваш скрипт в базу данных как один «мульти-оператор».

В этом случае вы должны выбирайте и выполняйте операторы CREATE DATABASE один за другим.

Попробуйте использовать psql, чтобы сделать эту работу более комфортной.

...