Heroku + Apartment PG::Error: ERROR: function pg_stat_statements_reset() does not exist

后端 未结 1 1844
旧时难觅i
旧时难觅i 2021-02-20 13:15

I use Apartment gem in Rails 4 to support multi-tenancy in Postgres 9.3.3 on Heroku.

An error is occurred when Apartment gem creates a new tenant.

Deep investiga

1条回答
  •  星月不相逢
    2021-02-20 13:38

    When a new schema is created Postgres is trying to reset stats by executing the function pg_stat_statements_reset()

    By default, this function can only be executed by superusers (from original doc).

    Heroku doesn't give you superuser privileges. So you need to disable extension pg_stat_statements.

    Solution 1 - Quick hot fix directly in DB

    1. Access the Rails Console for your Heroku app:

      heroku run rails c

    2. Execute SQL statement in schema public:

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

    Solution 2 - via migration

    1. Check the file db/schema.rb. Most probably it contains a line

      enable_extension "pg_stat_statements"

    2. Create a migration file

      rails g migration DropExtensionPgStatStatements

    3. define self.up method

      def self.up disable_extension "pg_stat_statements" end

    4. apply the migration

      rake db:migrate

    5. Now the file db/schema.rb should not contain that line

    6. Commit changes (schema and migration files) and deploy to Heroku

      rake deploy:production:migrations

    Regarding the rake task see deploy.rake

    0 讨论(0)
提交回复
热议问题