我使用超级用户帐户登录,这是我正在进行的过程:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
正确创建了该角色,但在尝试创建架构时遇到此错误:
ERROR: must be member of role "test"
提前致谢!
答案 0 :(得分:81)
在Amazon RDS上使用CREATE DATABASE
时遇到此问题。我认为它与使用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
答案 1 :(得分:25)
我遇到了同样的问题,它抱怨您登录的当前(主)用户不是您尝试为其创建架构的用户组的成员。您应该授予角色访问权限,并允许您创建SCHEMA而不会出现错误:
GRANT <role> TO <master_user>;
答案 2 :(得分:21)
您使用的是RDS吗?因为当我以他们为您创建的“超级用户”登录时,我遇到了同样的问题。我能够解决这个问题的方法是创建一个新的组角色,其中包括我的超级用户和拥有该模式的用户。因此,对您而言,这意味着将您的超级用户和测试用户添加到新的角色组:
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;
现在你应该能够创建你的schmea
了答案 3 :(得分:15)
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 ....
答案 4 :(得分:7)
我们不是必须将管理员用户成员资格授予服务角色吗?
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
答案 5 :(得分:5)
我也在RDS上遇到过这个问题。我以root
用户身份登录,创建了一个名为myappuser
的角色,然后尝试创建一个名为superduper
的架构,其所有者为myappuser
。
我找到了一个有效的解决方案。创建myappuser
角色,并确保此角色至少具有创建数据库的权限(该权限称为CREATEDB
)。创建myappuser
角色后,我以myappuser
身份登录到数据库,并创建了用户为superduper
的{{1}}架构。这没有任何问题。
答案 6 :(得分:0)
我遇到了同样的问题。为了解决这个问题,我使用新创建的角色登录并创建了数据库。 不知何故,授权在RDS Postgres中不起作用。
答案 7 :(得分:0)
我只是使用Amazon RDS遇到了这个问题。
许多答案已经是正确的,但是您也可以更改角色。
这是我的实现方式
psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"
因此,在更改密码的同时,我还向角色添加了CREATEDB角色权限。
答案 8 :(得分:0)
我通过用postgres
用户登录(然后应用我的更改(在我的情况下更改所有权))修复了该问题:
sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;