Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;错误:必须是角色“的成员”;在PostgreSQL中创建架构时_Postgresql_Roles - Fatal编程技术网

&引用;错误:必须是角色“的成员”;在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;