Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 investigation showed that a schema was created, but no tables inside.

Heroku logs showed an error:

PG::Error: ERROR:  function pg_stat_statements_reset() does not exist
like image 384
Sergiy Seletskyy Avatar asked Feb 11 '15 10:02

Sergiy Seletskyy


1 Answers

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

like image 141
Sergiy Seletskyy Avatar answered Sep 21 '22 11:09

Sergiy Seletskyy