&引用;错误:必须是角色“的成员”;在PostgreSQL中创建架构时
我使用超级用户帐户登录,这是我正在执行的过程:&引用;错误:必须是角色“的成员”;在PostgreSQL中创建架构时,postgresql,roles,Postgresql,Roles,我使用超级用户帐户登录,这是我正在执行的过程: 1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd' 2-> CREATE SCHEMA AUTHORIZATION test 角色已正确创建,但在尝试创建架构时出现以下错误: ERROR: must be member of role "test" 您正在使用RDS吗?因为当我以他们为您创建的“超级用户”身份登录时,我会遇到同样的问
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
角色已正确创建,但在尝试创建架构时出现以下错误:
ERROR: must be member of role "test"
您正在使用RDS吗?因为当我以他们为您创建的“超级用户”身份登录时,我会遇到同样的问题。我能够解决这个问题的方法是创建一个新的组角色,其中包括我的超级用户和拥有该模式的用户。因此,对您而言,这意味着将超级用户和测试用户添加到新的角色组:
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;
现在您应该可以创建您的schmea了,我在RDS上也遇到了这个问题。我以
root
用户身份登录,创建了一个名为myappuser
的角色,然后尝试创建一个名为superduper
的模式,其所有者是myappuser
我找到了一个有效的解决方案。创建
myappuser
角色,并确保该角色至少具有创建数据库的权限(该权限称为CREATEDB
)。创建了myappuser
角色后,我以myappuser
的身份登录数据库,并创建了superduper
模式,其用户是myappuser
。这没有任何问题。RDS也有这个问题
要解决这个问题:
以超级用户身份登录
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres
创建用户
CREATE USER newuser WITH CREATEDB PASSWORD 'password';
注销
\q
以新用户身份登录
psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres
创建数据库/模式
CREATE SCHEMA/DATABASE ....
我在Amazon RDS上使用
CREATE DATABASE
时遇到了这个问题。我认为这与使用createschema
基本相同
使用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
难道我们不需要将管理员用户成员身份授予服务角色吗
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 <role> TO <master_user>;
授予;
我也面临同样的问题。为了解决这个问题,我使用新创建的角色登录并创建了数据库。
不知何故,grant在RDS Postgres中不起作用。我刚刚使用Amazon RDS遇到了这个问题 很多答案都是正确的,但你也可以改变角色 这是我的实现
psql-h${PGHOST}-p${PGPORT:-5432}-U${PGUSER:-postgres}-c“使用CREATEDB密码“$RENDERPASSWORD”更改用户呈现程序”
因此,在更改密码的同时,我还将CREATEDB角色权限添加到该角色。我通过使用
postgres
用户登录来修复它(然后应用我的更改,这在我的情况下改变了所有权):
我仍然有同样的问题,任何人都可以帮助我吗?这有点困惑,但我确实用它来最终解决问题。请参阅我的回答:同样,但我发现新用户不需要拥有CREATEDB权限。我创建了一个普通用户,将该用户角色授予了我的管理员用户,然后使用管理员用户创建了数据库,所有者设置为普通用户。这里有一篇简短的文章描述了RDS上这种影响的原因。。我在Google Cloud SQL for PostgreSQL上也犯了同样的错误,这个答案就是解决方案,只是我运行了
GRANT o TO postgres代码>创建数据库之前。在Postgres 9.0及以上版本中,授予包括“TO”:将服务角色授予管理员用户代码>
sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;