我使用超级用户帐户登录,这是我正在执行的过程:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
角色已正确创建,但是在尝试创建架构时出现此错误:
ERROR: must be member of role "test"
提前致谢!
我使用超级用户帐户登录,这是我正在执行的过程:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
角色已正确创建,但是在尝试创建架构时出现此错误:
ERROR: must be member of role "test"
提前致谢!
Answers:
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;
在创建数据库之前运行过。
您正在使用RDS吗?因为当我以他们为您创建的“超级用户”身份登录时遇到相同的问题。我能够解决此问题的方法是创建一个新的组角色,其中包括我的超级用户和拥有该模式的用户。因此,对您而言,这意味着将您的超级用户和测试用户添加到新的角色组中:
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;
现在您应该可以创建您的schmea
RDS也有此问题。
以超级用户身份登录
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres
创建用户
CREATE USER newuser WITH CREATEDB PASSWORD 'password';
登出
\q
登录为 newuser
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres
创建您的数据库/架构
CREATE SCHEMA/DATABASE ....
我们不是只需要将admin用户成员身份授予服务角色吗?
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
。这项工作没有任何问题。