许可被拒绝创建扩展“uuid-ossp”

时间:2014-03-03 00:43:39

标签: ruby-on-rails postgresql

我正在postgresql上构建一个Rails项目,但是当我

rake db:migrate

我收到以下错误:

 permission denied to create extension "uuid-ossp"

以下是我的database.yml的样子:

app_common: &app_common
adapter: postgresql
host: 127.0.0.1
port: 5432
encoding: unicode
pool: 5
username: root
password:

5 个答案:

答案 0 :(得分:33)

想出来,我需要postgresql并将root角色更改为超级用户:

$psql

ALTER USER root WITH SUPERUSER;

答案 1 :(得分:17)

ALTER USER root WITH SUPERUSER如果数据库的用户是root但是如果它不是,则需要先运行psql作为超级用户,然后再运行此命令,以便运行

sudo -u postgres psql postgres

然后

ALTER USER mydb_user WITH SUPERUSER;

答案 2 :(得分:2)

解决方案:

  1. ALTER USER root WITH SUPERUSER;

    OR

  2. 使用PGADMIN,步骤:

      

    本地主机-> 登录角色-> 右键单击角色,即postgres -> **在“角色特权”选项卡中**-> 检查超级用户-> 确定

SS

享受。

答案 3 :(得分:2)

或者,从 Postgresql 13 开始,对当前数据库具有 CREATE 权限的角色可以安装受信任的扩展,而无需成为 SUPERUSER

来自Postgresql documentation

<块引用>

加载扩展通常需要与创建其组件对象所需的相同权限。对于许多扩展,这意味着需要超级用户权限。
但是,如果扩展在其控制文件中被标记为受信任,则任何对当前数据库具有 CREATE 权限的用户都可以安装它。
在这种情况下,扩展对象本身将由调用用户拥有,但包含的对象将由引导超级用户拥有(除非扩展的脚本明确将它们分配给调用用户)。此配置使调用用户有权删除扩展程序,但不能修改其中的单个对象。

根据您的安装,受信任的扩展程序至少应如下:

btree_gin btree_gist citext cube dict_int fuzzystrmatch hstore intarray isn lo ltree pgcrypto pg_trgm plpgsql seg tablefunc tcn tsm_system_rows tsm_system_time unaccent uuid-ossp

您可以再次检查或切换 trusted 文件中的 /usr/local/share/postgresql/extension/*.control 标志,具体取决于您的安装。

为 PostgreSQL 实例提供一个数据库 maindb 和两个角色:

  • postgres(默认超级用户)
  • jack(有限权限)
$ psql -U jack -d maindb

maindb=>CREATE EXTENSION plpgsql;

ERROR:  permission denied to create extension "plpgsql"

HINT:  Must have CREATE privilege on current database to create this extension.

maindb=> \q

显然 jack 不能将扩展添加到 maindb,现在让我们给他们正确的权限,然后再试一次:

$ psql -U postgres 

postgres=# GRANT CREATE ON DATABASE maindb to jack;
GRANT
postgres=# \q

$ psql -U jack -d maindb

maindb=>CREATE EXTENSION plpgsql;
CREATE EXTENSION

瞧,无需再授予 SUPERUSER 权限(无论如何您都不应该这样做)。

答案 4 :(得分:0)

对于 DBeaver,

<块引用>

右键单击 DB -> 查看数据库 -> 在属性下转到标签角色 -> 选择用户并为其分配角色。

对于超级用户角色,用户A为其他用户B分配超级用户角色,用户A应该是超级用户本身。