Heroku + Apartment PG::Error: ERROR: function pg_stat_statements_reset() does not exist
Heroku + Apartment PG::Error: ERROR: function pg_stat_statements_reset() does not exist
我在 Rails 4 中使用 Apartment gem 来支持 Heroku 上 Postgres 9.3.3 中的多租户。
公寓gem创建新租户时出错。
深入调查显示已创建模式,但内部没有表。
Heroku 日志显示错误:
PG::Error: ERROR: function pg_stat_statements_reset() does not exist
创建新模式时,Postgres 正在尝试通过执行函数 pg_stat_statements_reset()
来重置统计信息
默认情况下,此功能只能由超级用户执行(from original doc)。
Heroku 不给你超级用户权限。
所以你需要禁用扩展 pg_stat_statements.
解决方案 1 - 直接在数据库中快速热修复
访问 Heroku 应用的 Rails 控制台:
heroku 运行 rails c
在模式 public:
中执行 SQL 语句
ActiveRecord::Base.connection.execute("删除扩展 pg_stat_statements;")
解决方案 2 - 通过迁移
检查文件db/schema.rb。很可能它包含一行
enable_extension“pg_stat_statements”
创建迁移文件
rails g 迁移 DropExtensionPgStatStatements
定义self.up方法
def self.up
disable_extension “pg_stat_statements”
结束
应用迁移
耙子db:migrate
现在文件 db/schema.rb 不应包含该行
提交更改(架构和迁移文件)并部署到 Heroku
耙子deploy:production:migrations
关于 rake 任务,请参阅 deploy.rake
我在 Rails 4 中使用 Apartment gem 来支持 Heroku 上 Postgres 9.3.3 中的多租户。
公寓gem创建新租户时出错。
深入调查显示已创建模式,但内部没有表。
Heroku 日志显示错误:
PG::Error: ERROR: function pg_stat_statements_reset() does not exist
创建新模式时,Postgres 正在尝试通过执行函数 pg_stat_statements_reset()
来重置统计信息默认情况下,此功能只能由超级用户执行(from original doc)。
Heroku 不给你超级用户权限。 所以你需要禁用扩展 pg_stat_statements.
解决方案 1 - 直接在数据库中快速热修复
访问 Heroku 应用的 Rails 控制台:
heroku 运行 rails c
在模式 public:
中执行 SQL 语句ActiveRecord::Base.connection.execute("删除扩展 pg_stat_statements;")
解决方案 2 - 通过迁移
检查文件db/schema.rb。很可能它包含一行
enable_extension“pg_stat_statements”
创建迁移文件
rails g 迁移 DropExtensionPgStatStatements
定义self.up方法
def self.up disable_extension “pg_stat_statements” 结束
应用迁移
耙子db:migrate
现在文件 db/schema.rb 不应包含该行
提交更改(架构和迁移文件)并部署到 Heroku
耙子deploy:production:migrations
关于 rake 任务,请参阅 deploy.rake