关于rails上的ruby:PG :: InsufficientPrivilege:错误:关系schema_migrations的权限被拒绝rake db:create

PG::InsufficientPrivilege: ERROR: permission denied for relation schema_migrations rake db:create

我正在尝试在Rails中创建数据库。 在postgres中我看到了开发和测试数据库,但是我收到了权限错误。 我试过按照这个链接,对我不起作用。

错误:PG::InsufficientPrivilege: ERROR: permission denied for relation schema_migrations : SELECT"schema_migrations".* FROM"schema_migrations"

Rails:关系schema_migrations的权限被拒绝

1
2
3
4
5
6
7
8
9
10
11
default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  username: root
  password:

development:
  <<: *default
  database: svp-chicago_development

我登录postgres并执行了这些命令。

1
2
3
4
5
psql postgres
CREATE USER root
CREATE DATABASE svp-chicago_development
GRANT ALL PRIVILEGES ON DATABASE svp-chicago_development to root
ALTER DATABASE svp-chicago_development OWNER TO root

当我\list时,我看到数据库在那里。


我有同样的问题,我通过在角色中添加"超级用户"来解决。

首先,列出用户及其权限。如果您遵循上述命令,则root用户没有"超级用户"属性。

1
2
3
4
5
6
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 other     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      |                                                            | {}

接下来,将root升级为"超级用户"。

1
2
postgres=# ALTER USER root WITH SUPERUSER;
ALTER ROLE

再次列出用户及其权限。现在root有"超级用户"。

1
2
3
4
5
6
postgres=# \du
                               List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 other     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      | Superuser                                                  | {}

希望能帮助到你。


我猜你错过了为user创建password。尝试创建密码如下:

1
2
3
4
CREATE USER root WITH PASSWORD 'your_new_password';
CREATE DATABASE svp-chicago_development;
GRANT ALL PRIVILEGES ON DATABASE svp-chicago_development to root;
ALTER DATABASE svp-chicago_development OWNER TO root;


为了防止其他人来到这里遇到同样的问题,我确实尝试了许多其他解决方案,最适合我的解决方案如下:在PostgreSQL中同时修改所有表上的OWNER

  • 这是有效的,因为我的用户(例如rootpostgres)具有Superuser权限,因此在尝试分配system对象时尝试REASSIGN OWNED会出错
  • ALTER DATABASE不起作用,因为问题是对象所有权而不是数据库所有权。更改数据库上的所有者不会传播到该数据库模式上的其他对象