PG:: InsufficientPrivilege: ОШИБКА: разрешение отклонено для отношения 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

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  username: root
  password:

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

Я вхожу в postgres и выполнял эти команды.

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, я вижу базу данных.

Ответ 1

Я думаю, вы пропустили создание 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

У меня была та же проблема, и я решил, добавив "Superuser" к роли.

Сначала перечислите пользователей и их привилегии. Если вы выполнили приведенные выше команды, пользователь root не имеет атрибутов "Superuser".

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

Опять же, список пользователей и их привилегии. Теперь у root есть "Superuser".

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

Надеюсь, поможет.

Ответ 3

На случай, если кто-то еще придет сюда с той же проблемой, я попробовал много других решений, и наиболее подходящим для меня было следующее: Изменить OWNER для всех таблиц одновременно в PostgreSQL.

  • Это работает с моим пользователя (например, root или postgres) имел Superuser привилегия таким образом пытаясь переназначить OWNED дает ошибку при попытке назначить system объекты
  • ALTER DATABASE не работает, так как проблема связана с владением объектом таблицы, а не с владельцем БД. Изменение владельца в БД не распространяется на другой объект в этой схеме БД