Ruby on rails Rails:PG::InsufficientPrivilege:错误:拒绝关系架构_迁移的权限
我正在尝试在Rails中创建数据库。在Postgres中,我看到了开发和测试数据库,但是,我得到了一个权限错误。我尝试过跟踪这个链接,但对我无效 错误:Ruby on rails Rails:PG::InsufficientPrivilege:错误:拒绝关系架构_迁移的权限,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我正在尝试在Rails中创建数据库。在Postgres中,我看到了开发和测试数据库,但是,我得到了一个权限错误。我尝试过跟踪这个链接,但对我无效 错误:PG::InsufficientPrivilege:错误:拒绝对关系架构迁移的权限:从“架构迁移”中选择“架构迁移”。* 当我执行\list时,我看到数据库就在那里。我想你没有为你的用户创建密码。尝试按以下方式创建密码: CREATE USER root WITH PASSWORD 'your_new_password'; CREATE DAT
PG::InsufficientPrivilege:错误:拒绝对关系架构迁移的权限:从“架构迁移”中选择“架构迁移”。*
当我执行\list
时,我看到数据库就在那里。我想你没有为你的用户创建密码。尝试按以下方式创建密码:
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;
我也有同样的问题,我通过在角色中添加“超级用户”来解决
首先,列出用户及其权限。如果您遵循上述命令,则根用户没有“超级用户”属性
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
other | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | | {}
接下来,将root升级为“超级用户”
再次列出用户及其权限。现在root有了“超级用户”
希望能有帮助 为了防止其他人带着同样的问题来到这里,我尝试了许多其他的解决方案,其中对我最有效的是:
- 这是因为我的用户(例如
root
或postgres
)具有超级用户
权限,因此尝试分配系统
对象时会出错
- 不起作用,因为该问题与表对象所有权有关,而不在数据库所有权中。更改数据库上的所有者不会传播到该数据库架构上的其他对象
此外,如果您使用的是Heroku之类的服务,则值得检查您是否超出了行限制,并且数据库中的写访问权限是否已被撤销
您可以通过进入仪表板,单击应用程序,单击postgres服务图标,然后检查行限制来完成此操作。尝试列出您的表以查看所有者。在我的例子中,我通过psql
导入了数据,所有导入的表都归postgres
所有,而不是我的用户
要检查这一点,请启动psql
,然后在数据库中输入命令\dt
。查找以下行:
public | schema_migrations | table | postgres
不好!它属于postgres
所有,您需要修复它:
您可以使用@ddreliv's here重新分配每个表的所有者,或者
如果您有一个转储,只需删除数据库并使用适当的用户重新导入即可。例如,使用sudo-u my_user psql
而不是sudo-u postgres psql
我在使用PostgreSQL开发Rails 6应用程序时遇到了这个问题
第一项检查是确保已将数据库的所有权限授予要使用的特定用户:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myusername;
但在我自己的例子中,问题的原因是我创建了一个数据库,然后将所有特权授予特定的用户。过了一段时间,我使用将数据库mydatabase上的所有权限授予myusername,授予另一个用户权限s代码>
因此,第二个用户即使我授予了它所有权限,也没有权限对数据库表执行操作
以下是我如何修复它的方法:
登录存储数据库的PostgreSQL控制台:
sudo -u postgres psql
列出该PostgreSQL数据库服务器中的所有数据库:
\l
或
连接到要修复其权限的数据库:
\c database_name
或
使用搜索路径列出当前数据库中的所有表:
\dt
\dt *.
或
列出当前数据库中的所有表,而不考虑您的搜索路径
:
\dt
\dt *.
您会注意到,这些表仍然引用初始的用户
或角色
作为所有者
现在,您必须修改这些表,以引用新的用户
或角色
作为所有者
您可以使用以下方法分别修改每个表:
ALTER TABLE table_name OWNER TO new_owner;
REASSIGN OWNED BY old_owner TO new_owner;
这不需要指定旧所有者
。当用户是postgres
(默认数据库用户)并且您希望将所有者修改为新用户时,这一点非常重要
或使用以下命令同时修改所有表格:
ALTER TABLE table_name OWNER TO new_owner;
REASSIGN OWNED BY old_owner TO new_owner;
这需要指定旧所有者
。如果您已经将用户从postgres
(默认数据库用户)修改为另一个用户,并且希望将所有者修改为新用户,则这一点至关重要
注意:确保已连接到要修改其权限的数据库,否则可能会出错
就这些
我希望这有帮助可能是密码问题;尝试使用密码创建root
用户,并将其包含在config/database.yml
文件中。在这里记录我最近的大脑放屁,以防它对其他人有所帮助:)我在Render.com上设置了一个Rails应用程序,并获得了“PG::InsufficientPrivilege”,试图在其shell中运行“bin/Rails db:create”。然后意识到我已经通过他们的用户界面创建了数据库,我想要的是“bin/rakedb:schema:load”。我这样做了,我的postgres不断给出同样的错误。请您看一下以下对我有用的答案:注意:此解决方法是并且应该谨慎使用。适用于我的本地-dba的问题现在:)
ALTER TABLE table_name OWNER TO new_owner;
REASSIGN OWNED BY old_owner TO new_owner;