我正在尝试在Rails中创建数据库。在postgres中我看到了开发和测试数据库,但是我收到了权限错误。我试图按照这个链接,对我不起作用。
错误:default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
username: root
password:
development:
<<: *default
database: svp-chicago_development
Rails: permission denied for relation schema_migrations
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
我登录postgres并执行了这些命令。
\list
当我{{1}}时,我看到数据库在那里。
答案 0 :(得分:26)
我有同样的问题,我通过在角色中添加“超级用户”来解决。
首先,列出用户及其权限。如果您遵循上述命令,则root用户没有“超级用户”属性。
length
接下来,将root升级为“超级用户”。
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
other | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | | {}
再次列出用户及其权限。现在root有“超级用户”。
postgres=# ALTER USER root WITH SUPERUSER;
ALTER ROLE
希望它有所帮助。
答案 1 :(得分:8)
我猜你错过了为password
创建user
。尝试创建密码如下:
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;
答案 2 :(得分:4)
此外,如果您使用的是Heroku之类的服务,则值得检查一下是否超过了行数限制,并且数据库中的写访问权限已被撤销。
您可以通过以下方式进行操作:转到仪表板,单击应用程序,单击postgres服务图标,然后检查行数限制。
答案 3 :(得分:1)
在PostgreSQL上使用Rails 6应用程序时遇到了这个问题。
第一步是确保您已将数据库的所有特权授予要使用的特定用户:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myusername;
但就我个人而言,问题的原因是我创建了一个数据库,然后将所有特权授予了特定的用户 。一段时间后,我使用GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myusername;
因此,即使我授予第二个用户所有特权,第二个用户也没有权限对数据库表执行操作。
这是我修复的方式:
登录存储数据库的PostgreSQL控制台:
sudo -u postgres psql
列出该PostgreSQL数据库服务器中的所有数据库:
\l
OR
\list
连接到要修复其权限的数据库:
\c database_name
OR
\connect database name
使用您的search_path
列出当前数据库中的所有表:
\dt
OR
列出当前数据库中的所有表,而不考虑您的search_path
:
\dt *.
您会注意到,表仍然将初始user
或role
引用为owner
。
现在,您将必须修改表以将新的user
或role
引用为owner
。
您可以使用以下方法分别修改每个表:
ALTER TABLE table_name OWNER TO new_owner;
这不需要指定old_owner
。当用户为postgres
(默认数据库用户)并且您想要将所有者修改为新用户时,这一点很重要。
OR 与此同时修改所有表:
REASSIGN OWNED BY old_owner TO new_owner;
这需要指定old_owner
。当您已经将用户从postgres
(默认数据库用户)修改为另一个用户,并且想要将所有者修改为新用户时,这是至关重要的。
注意:确保您已连接到要为其修改特权/权限的数据库,否则可能会出错。
仅此而已。
我希望这会有所帮助
答案 4 :(得分:0)
以防万一其他人遇到同样的问题,我也尝试了许多其他解决方案,而对我来说最好的解决方案是:Modify OWNER on all tables simultaneously in PostgreSQL
> solve.QP(Dmat,dvec,Amat,bvec)
$solution
[1] -0.8064516 0.2096774
$value
[1] -0.04032258
或root
)拥有postgres
权限,因此尝试REASSIGN OWNED尝试分配Superuser
对象时会出错,答案 5 :(得分:0)
尝试列出您的表以查看所有者是谁。就我而言,我是通过psql < dump.sql
导入数据的,所有导入的表都是postgres
而非我的用户所有的。
要对此进行检查,请启动psql
,然后在数据库中输入命令\dt
。查找以下行:
public | schema_migrations | table | postgres
不好!它归postgres
所有,您需要解决以下问题:
sudo -u my_user psql < dump.sql
代替sudo -u postgres psql < dump.sql
。