AWS RDS 扩展安装

7ur*_*m3n 3 ruby postgresql ruby-on-rails amazon-web-services amazon-rds

我正在尝试为 AWS RDS Postgres 实例中的特定用户启用一些 Postgres 扩展。

1) 我尝试过使用 rails 迁移进行部署,但没有奏效。

class InstallPgTrgmContribPackage < ActiveRecord::Migration[5.1]
  def change
    enable_extension "fuzzystrmatch"
    enable_extension "pg_trgm"
    enable_extension "unaccent"

    # execute "CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;"
    # execute "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
    # execute "CREATE EXTENSION IF NOT EXISTS unaccent;"
  end
end
Run Code Online (Sandbox Code Playgroud)

2)另外,尝试通过 ssh-ing 进入 postgres 并从那里创建它。

psql -h blabla.us-east-1.rds.amazonaws.com -p 5432 -U prod -d prod

prod=> CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
returns: ERROR:  permission denied to create extension "fuzzystrmatch"
          HINT:  Must be superuser to create this extension.
Run Code Online (Sandbox Code Playgroud)

默认情况下,RDS 实例角色是 test,我可以在 test 用户中创建扩展。我正在尝试安装在 prod 和 dev 用户中。

在此处输入图片说明

通过 Elastic Beanstalk 部署的 Rails 应用程序。

问题:如何将超级用户权限添加到新用户角色中?

Roh*_*han 5

似乎 prod 用户没有超级用户权限:

正如 AWS Docs 所述:

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html

1. create role testuser with password 'testuser' login;   
   CREATE ROLE   

2. grant rds_superuser to testuser;   
   GRANT ROLE   
Run Code Online (Sandbox Code Playgroud)

第 1 点已经完成,因为有一个 prod 用户

因此,您需要运行第 2 点命令来授予权限。