[SOLVED] Ruby Sequel with Postgresql: How do I remove reference to an ‘undefinedtable’

Issue

This Content is from Stack Overflow. Question asked by megazoic

Hi: I need to remove a reference to a table that is incorrect but I cannot find where that reference is stored.
I am using ruby 2.6.0, sequel 5.30.0 and postgres 13 and Sinatra 2.0.8.

I mistakenly referred to a table with a misspelling in one of my migration files, ran the migrator and now I am getting an error that the table (with the misspelled name) does not exist when I try to run the application.

Sequel::DatabaseError: PG::UndefinedTable: ERROR: relation "renew_event_types" does not exist

I corrected the misspelled reference in my migration (it should be “renewal_event_types”), ran the migrations back to the one before this then reran all the migrations forward and I still get the error. I dropped the database, ran the migrations again and still get the error. I cannot find any file with the word “renew_event_types” in it on my system so I believe that somehow this reference is not in ascii format. If it was stored in Postgres, it should have been removed when I dropped the database. Would it be stored in a sequel file somewhere associated with this project?

Here is the full trace in my terminal. Thanks for any pointers on how to begin to solve this problem.

2022-09-18 16:06:06.135 PDT [1837] ERROR:  relation "renew_event_types" does not exist at character 1133
2022-09-18 16:06:06.135 PDT [1837] STATEMENT:  SELECT "pg_attribute"."attname" AS "name", CAST("pg_attribute"."atttypid" AS integer) AS "oid", CAST("basetype"."oid" AS integer) AS "base_oid", format_type("basetype"."oid", "pg_type"."typtypmod") AS "db_base_type", format_type("pg_type"."oid", "pg_attribute"."atttypmod") AS "db_type", pg_get_expr("pg_attrdef"."adbin", "pg_class"."oid") AS "default", NOT "pg_attribute"."attnotnull" AS "allow_null", COALESCE(("pg_attribute"."attnum" = ANY("pg_index"."indkey")), false) AS "primary_key", "pg_attribute"."attidentity" FROM "pg_class" INNER JOIN "pg_attribute" ON ("pg_attribute"."attrelid" = "pg_class"."oid") INNER JOIN "pg_type" ON ("pg_type"."oid" = "pg_attribute"."atttypid") LEFT OUTER JOIN "pg_type" AS "basetype" ON ("basetype"."oid" = "pg_type"."typbasetype") LEFT OUTER JOIN "pg_attrdef" ON (("pg_attrdef"."adrelid" = "pg_class"."oid") AND ("pg_attrdef"."adnum" = "pg_attribute"."attnum")) LEFT OUTER JOIN "pg_index" ON (("pg_index"."indrelid" = "pg_class"."oid") AND ("pg_index"."indisprimary" IS TRUE)) WHERE (("pg_attribute"."attisdropped" IS FALSE) AND ("pg_attribute"."attnum" > 0) AND ("pg_class"."oid" = CAST(CAST('"renew_event_types"' AS regclass) AS oid))) ORDER BY "pg_attribute"."attnum"
2022-09-18 16:06:06.135 PDT [1837] ERROR:  relation "renew_event_types" does not exist at character 15
2022-09-18 16:06:06.135 PDT [1837] STATEMENT:  SELECT * FROM "renew_event_types" LIMIT 1
bundler: failed to load command: rackup (/Users/megazoic/.rbenv/versions/2.6.6/bin/rackup)
Sequel::DatabaseError: PG::UndefinedTable: ERROR:  relation "renew_event_types" does not exist
LINE 1: SELECT * FROM "renew_event_types" LIMIT 1
                      ^

  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:156:in `exec'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:156:in `block in execute_query'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/database/logging.rb:38:in `log_connection_yield'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:156:in `execute_query'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:144:in `block in execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:120:in `check_disconnect_errors'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:144:in `execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:500:in `_execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:318:in `block (2 levels) in execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:522:in `check_database_errors'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:318:in `block in execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/connection_pool/threaded.rb:88:in `hold'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/database/connecting.rb:270:in `synchronize'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:318:in `execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/dataset/actions.rb:1089:in `execute'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/adapters/postgres.rb:614:in `fetch_rows'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/dataset/actions.rb:152:in `each'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/dataset/actions.rb:86:in `columns!'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/dataset/actions.rb:76:in `columns'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:242:in `columns'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:811:in `block (2 levels) in get_db_schema'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:725:in `block in check_non_connection_error'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/database/transactions.rb:201:in `block in transaction'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/connection_pool/threaded.rb:92:in `hold'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/database/connecting.rb:270:in `synchronize'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/database/transactions.rb:195:in `transaction'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:725:in `check_non_connection_error'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:811:in `block in get_db_schema'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:844:in `get_db_schema'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:644:in `set_dataset'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/sequel-5.30.0/lib/sequel/model/base.rb:499:in `inherited'
  /Users/megazoic/Documents/dev/proj/versioned/ruby/parc-mbr/app/renewalEventType.rb:4:in `<module:MemberTracker>'
  /Users/megazoic/Documents/dev/proj/versioned/ruby/parc-mbr/app/renewalEventType.rb:3:in `<top (required)>'
  /Users/megazoic/Documents/dev/proj/versioned/ruby/parc-mbr/app/api.rb:20:in `require_relative'
  /Users/megazoic/Documents/dev/proj/versioned/ruby/parc-mbr/app/api.rb:20:in `<top (required)>'
  /Users/megazoic/Documents/dev/proj/versioned/ruby/parc-mbr/config.ru:1:in `require_relative'
  /Users/megazoic/Documents/dev/proj/versioned/ruby/parc-mbr/config.ru:1:in `block in <main>'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/builder.rb:116:in `eval'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/builder.rb:116:in `new_from_string'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/builder.rb:105:in `load_file'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/builder.rb:66:in `parse_file'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:349:in `build_app_and_options_from_config'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:249:in `app'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:422:in `wrapped_app'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:312:in `block in start'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:379:in `handle_profiling'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:311:in `start'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/server.rb:168:in `start'
  /Users/megazoic/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.2.2/bin/rackup:5:in `<top (required)>'
  /Users/megazoic/.rbenv/versions/2.6.6/bin/rackup:23:in `load'
  /Users/megazoic/.rbenv/versions/2.6.6/bin/rackup:23:in `<top (required)>'



Solution

My error was to leave the model name unchanged (class RenewEventType) even though I had changed the creation of the associated table in the migration files and the reference to the foreign key in the model description. Ruby and presumably Sequel used this name of the model to look for the corresponding table that hadn’t been created. Thanks @spikermann for pointing me in the right direction.


This Question was asked in StackOverflow by megazoic and Answered by megazoic It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?