amatsuda / database_rewinder

minimalist's tiny and ultra-fast database cleaner
MIT License
807 stars 91 forks source link

postgresql error #40

Closed rainerborene closed 8 years ago

rainerborene commented 8 years ago

Just updated to version 0.6.2 and got this error message.

/Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `async_exec': PG::ObjectNotInPrerequisiteState: ERROR:  cannot delete from view "pg_stat_statements" (ActiveRecord::StatementInvalid)
DETAIL:  Views that do not select from a single table or view are not automatically updatable.
HINT:  To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule.
: DELETE FROM "pg_stat_statements";
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `block in execute'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/connection_adapters/abstract_adapter.rb:566:in `block in log'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/connection_adapters/abstract_adapter.rb:560:in `log'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb:97:in `execute'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/active_record_monkey.rb:5:in `execute'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/cleaner.rb:49:in `block (2 levels) in delete_all'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/cleaner.rb:48:in `each'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/cleaner.rb:48:in `block in delete_all'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/connection_adapters/postgresql/referential_integrity.rb:22:in `disable_referential_integrity'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/cleaner.rb:47:in `delete_all'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/cleaner.rb:34:in `block in clean_all'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/dummy_model.rb:6:in `with_temporary_connection'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder/cleaner.rb:33:in `clean_all'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder.rb:69:in `each'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/database_rewinder-0.6.2/lib/database_rewinder.rb:69:in `clean_all'
        from /Users/rainerborene/Projects/mailkiq/spec/support/database_rewinder.rb:3:in `block (2 levels) in <top (required)>'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/example.rb:441:in `instance_exec'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/example.rb:441:in `instance_exec'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/hooks.rb:350:in `run'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/configuration.rb:1880:in `block in run_hooks_with'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/configuration.rb:1880:in `each'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/configuration.rb:1880:in `run_hooks_with'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/configuration.rb:1836:in `with_suite_hooks'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/runner.rb:112:in `block in run_specs'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/reporter.rb:77:in `report'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/runner.rb:111:in `run_specs'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/runner.rb:87:in `run'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/runner.rb:71:in `run'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/lib/rspec/core/runner.rb:45:in `invoke'
        from /Users/rainerborene/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.0/exe/rspec:4:in `<top (required)>'
        from /Users/rainerborene/.rbenv/versions/2.3.1/bin/rspec:22:in `load'
        from /Users/rainerborene/.rbenv/versions/2.3.1/bin/rspec:22:in `<main>'
scarfacedeb commented 8 years ago

@rainerborene For now you can hack it:

  config.before :suite do
    DatabaseRewinder.instance_variable_set(:@except, ["pg_stat_statements"])
    DatabaseRewinder.clean_all
  end
manuelmeurer commented 8 years ago

@scarfacedeb Doesn't work for me unfortunately... :(

rainerborene commented 8 years ago

@manuelmeurer same here :(

amatsuda commented 8 years ago

Sorry for the breakage. This bug was introduced in ac1e0e8e5e86b648ae61489e15cb59509e5647d8 which aimed to suppress AR 5 deprecation warning.

Current AR 5 adapters are kind of broken like this:

adapter #tables #data_sources
postgres returns tables only returns tables, views, and material views
other adapters warns, then returns tables only returns tables only

so there's no good way to fulfil both

Anyway, the rewinder should better not try to delete from views. So I just reverted ac1e0e8e5e86b648ae61489e15cb59509e5647d8 with an adhoc warning sliencer, and released the 0.6.3 gem. I Hope this fixes your problems!

manuelmeurer commented 8 years ago

Thanks for the quick fix, @amatsuda!