11

我在 Rails 4 中使用 Apartment gem 来支持 Heroku 上 Postgres 9.3.3 中的多租户。

Apartment gem 创建新租户时出错。

深入调查显示创建了一个模式,但内部没有表。

Heroku 日志显示错误:

PG::Error: ERROR:  function pg_stat_statements_reset() does not exist
4

1 回答 1

17

当创建新模式时,Postgres 试图通过执行函数pg_stat_statements_reset()来重置统计信息

默认情况下,此功能只能由超级用户执行 (来自原始文档)

Heroku 没有给你超级用户权限。所以你需要禁用扩展 pg_stat_statements。

解决方案 1 - 直接在数据库中快速修复

  1. 访问 Heroku 应用程序的 Rails 控制台:

    heroku run rails c

  2. 在公共架构中执行 SQL 语句:

    ActiveRecord::Base.connection.execute("DROP EXTENSION pg_stat_statements;")

解决方案 2 - 通过迁移

  1. 检查文件db/schema.rb。很可能它包含一行

    enable_extension “pg_stat_statements”

  2. 创建迁移文件

    rails g 迁移 DropExtensionPgStatStatements

  3. 定义 self.up 方法

    def self.up disable_extension "pg_stat_statements" 结束

  4. 应用迁移

    耙分贝:迁移

  5. 现在文件db/schema.rb不应包含该行

  6. 提交更改(架构和迁移文件)并部署到 Heroku

    rake 部署:生产:迁移

关于 rake 任务见deploy.rake

于 2015-02-11T10:52:26.090 回答