Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PG undefinedtable error relation users does not exist

I saw this question up before, but only for rspec. I haven't created test yet because it's too advanced for me but one day soon i will! :P

I get this error when I try to sign-up/login into my app. I used devise to create user and also omniauth2 to sign-in with google.

this is the error

ActiveRecord::StatementInvalid at /users/auth/google_oauth2/callback PG::UndefinedTable: ERROR:  relation "users" does not exist LINE 5:              WHERE a.attrelid = '"users"'::regclass                                         ^ :             SELECT a.attname, format_type(a.atttypid, a.atttypmod),                      pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod               FROM pg_attribute a LEFT JOIN pg_attrdef d                 ON a.attrelid = d.adrelid AND a.attnum = d.adnum              WHERE a.attrelid = '"users"'::regclass                AND a.attnum > 0 AND NOT a.attisdropped              ORDER BY a.attnum 

I tried rake db:migrate, but it already is created: in schema table users exist. Has anyone got this error before?

database.yml

config=/opt/local/lib/postgresql84/bin/pg_config

development:   adapter: postgresql   encoding: unicode   database: tt_intraweb_development   pool: 5   username: my_username   password:  test:   adapter: postgresql   encoding: unicode   database: tt_intraweb_test   pool: 5   username: my_username   password:  production:   adapter: postgresql   encoding: unicode   database: tt_intraweb_production   pool: 5   username: my_username   password: 
like image 680
Naomi K Avatar asked Sep 30 '13 15:09

Naomi K


1 Answers

At first, you shall detach all connections out of database. By default you use the development environment. Then try to reset database with the following:

rake db:reset 

The rake db:reset task will drop the database and set it up again. This is functionally equivalent to rake db:drop db:setup.

This is not the same as running all the migrations. It will only use the contents of the current schema.rb file. If a migration can't be rolled back, rake db:reset may not help you. To find out more about dumping the schema see Schema Dumping and You section. Rails Docs

If the trick doesn't help, drop the database, then re-create it again, migrate data, and if you have seeds, sow the database:

rake db:drop db:create db:migrate db:seed 

or in short way (since 3.2):

rake db:migrate:reset db:seed 

Since db:migrate:reset implies drop, create and migrate the db. Because the default environment for rake is development, in case if you see the exception in spec tests, you should re-create db for the test environment as follows:

RAILS_ENV=test rake db:drop db:create db:migrate 

or with just loading the migrated scheme:

RAILS_ENV=test rake db:drop db:create db:schema:load 

In most cases the test database is being sowed during the test procedures, so db:seed task action isn't required to be passed. Otherwise, you shall to prepare the database (this is deprecated in Rails 4):

rake db:test:prepare 

and then (if it is actually required):

RAILS_ENV=test rake db:seed 

On newer versions of Rails the error ActiveRecord::NoEnvironmentInSchemaError may be risen, so just prepend the tasks with a database environment set task: db:environment:set:

RAILS_ENV=test rake db:environment:set db:drop db:create db:migrate 
like image 76
Малъ Скрылевъ Avatar answered Oct 16 '22 08:10

Малъ Скрылевъ