在 PostgreSQL 中创建模式时,“ ERROR: must be member of role”

我用一个超级用户账号登录,我正在做的是:

1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test

角色已经正确创建,但是在尝试创建 Schema 时出现了这个错误:

ERROR:  must be member of role "test"
132326 次浏览

你在用 RDS 吗?因为当我作为他们为您创建的“超级用户”登录时,我会遇到同样的问题。我能够解决这个问题的方法是创建一个新的组角色,其中包括我的超级用户和拥有模式的用户。因此,对于您来说,这意味着将您的超级用户和测试用户添加到一个新的角色组:

CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;

现在您应该能够创建您的模式了

我在 RDS 上也遇到过这个问题。我作为 root用户登录,创建了一个名为 myappuser的角色,然后尝试创建一个名为 superduper的模式,其所有者是 myappuser

我找到了一个有效的解决办法。创建 myappuser角色,并确保该角色至少具有创建数据库的权限(该权限称为 CREATEDB)。在创建了 myappuser角色之后,我以 myappuser的身份登录到数据库,并创建了用户为 myappusersuperduper模式。这没有任何问题。

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 your DB/Schema

CREATE SCHEMA/DATABASE ....

我在 Amazon RDS 上使用 CREATE DATABASE时遇到了这个问题。我认为它本质上和使用 CREATE SCHEMA是一样的。

When using Amazon RDS, the user issuing the CREATE DATABASE must be a member of the role that will be the owner of the database. In my case, the superuser account I'm using is called root, and I'm going to create a role o which is going to own a database 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

我遇到过同样的问题,它抱怨当前登录的(主)用户不是您试图创建模式的用户组的成员。您应该将角色访问权限授予您的主用户,它将允许您创建 SCHEMA 而不会出现错误:

GRANT <role> TO <master_user>;

我也面临着同样的问题。为了解决这个问题,我使用新创建的角色登录并创建了数据库。 不知道为什么 Grant 不在 RDS Postgres 工作。

我刚用亚马逊的 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;