Я вошел в систему с учетной записью суперпользователя, и вот что я делаю:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
Роль создана правильно, но я получаю эту ошибку при попытке создать схему:
ERROR: must be member of role "test"
Заранее спасибо!
postgresql
roles
Ultranuke
источник
источник
Ответы:
Я столкнулся с этой проблемой при использовании
CREATE DATABASE
Amazon RDS. Я думаю, что по сути это то же самое, что и использованиеCREATE SCHEMA
.При использовании Amazon RDS пользователь, выдающий
CREATE DATABASE
учетную запись, должен быть членом роли, которая будет владельцем базы данных. В моем случае вызывается учетная запись суперпользователя, которую я используюroot
, и я собираюсь создать роль,o
которая будет владеть базой данныхd
:postgres=> CREATE ROLE o; CREATE ROLE postgres=> CREATE DATABASE d OWNER = o; ERROR: must be member of role "o" postgres=> GRANT o TO root; GRANT ROLE postgres=> CREATE DATABASE d OWNER = o; CREATE DATABASE
источник
GRANT o TO postgres;
перед созданием базы данных.Я столкнулся с той же проблемой: он жалуется на то, что текущий (главный) пользователь, с которым вы вошли в систему, не является членом группы пользователей, для которой вы пытаетесь создать схему. Вы должны предоставить доступ к роли вашему главному пользователю, и это позволит вам создать SCHEMA без ошибок:
GRANT <role> TO <master_user>;
источник
Вы используете RDS? Потому что я получаю ту же проблему, когда вхожу в систему как «суперпользователь», которую они для вас создают. Способ, которым я смог это исправить, заключался в создании новой групповой роли, включающей моего суперпользователя и пользователя, владеющего схемой. Таким образом, для вас это будет означать добавление вашего суперпользователя и тестового пользователя в новую группу ролей:
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT megausers TO testroles; GRANT test TO testroles;
Теперь вы сможете создать свою шмею
источник
Была эта проблема и с RDS.
Чтобы решить эту проблему:
Войти как суперпользователь
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres
Создать пользователя
CREATE USER newuser WITH CREATEDB PASSWORD 'password';
Выйти
Войти как
newuser
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres
Создайте свою БД / схему
CREATE SCHEMA/DATABASE ....
источник
Разве мы не должны просто предоставить членство администратора в роли службы?
create role service_role with password 'some_password'; create database service_db with owner service_role; ERROR: must be member of role "service_role" grant admin_user service_role; GRANT ROLE create database service_db with owner service_role; CREATE DATABASE
источник
GRANT service_role TO admin_user;
Я столкнулся с этой проблемой и в RDS. Я вошел в систему как
root
пользователь, создал роль с именем,myappuser
а затем попытался создать схему с именемsuperduper
, владельцем которой являетсяmyappuser
.Я нашел решение, которое работает. Создайте
myappuser
роль и убедитесь, что у этой роли есть хотя бы разрешение на создание баз данных (эта привилегия называетсяCREATEDB
). После созданияmyappuser
роли я вошел в базу данных какmyappuser
и создалsuperduper
схему, пользователем которой являетсяmyappuser
. Это сработало без проблем.источник
Я столкнулся с той же проблемой. Чтобы решить эту проблему, я вошел в систему с вновь созданной ролью и создал базу данных. Как-то не работает грант в RDS Postgres.
источник
Я только что столкнулся с этим при использовании Amazon RDS.
Многие ответы уже верны, но вы также можете просто изменить роль.
Вот моя реализация
psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"
Поэтому при изменении пароля я также добавляю к роли разрешение роли CREATEDB.
источник
Я исправил это, войдя в систему с
postgres
пользователем (а затем применил свои изменения, которые в моем случае меняли владельца):sudo -u postgres psql ALTER DATABASE my_database OWNER TO new_user;
источник