Не удается запустить миграцию БД в PostgreSQL

#ruby-on-rails #postgresql #pg

#ruby-on-rails #postgresql #pg

Вопрос:

Я только что перешел с sqlite3 на PG, и после создания базы данных через pgAdmin и попытки запустить миграцию я сталкиваюсь со следующим, чего я не понимаю.

 Pawel:bodb pawel$ rake db:create
DEPRECATION WARNING: Rake tasks in /Users/pawel/Ruby/apps/bodb/vendor/plugins/google_charts_on_rails/tasks/google_charts_on_rails_tasks.rake are deprecated. Use lib/tasks instead. (called from /Users/pawel/Ruby/apps/bodb/Rakefile:7)

firstdb already exists
Pawel:bodb pawel$ rake db:migrate
DEPRECATION WARNING: Rake tasks in /Users/pawel/Ruby/apps/bodb/vendor/plugins/google_charts_on_rails/tasks/google_charts_on_rails_tasks.rake are deprecated. Use lib/tasks instead. (called from /Users/pawel/Ruby/apps/bodb/Rakefile:7)
==  AddLikesToUsers: migrating ================================================
-- add_column(:Users, :likes, :string)
rake aborted!
An error has occurred, this and all later migrations canceled:

PGError: ERROR:  relation "Users" does not exist
: ALTER TABLE "Users" ADD COLUMN "likes" character varying(255)

Tasks: TOP => db:migrate
(See full trace by running task with --trace) 
  

Ответ №1:

Я не знаю о предупреждениях, но в сообщении об ошибке говорится:

отношение «Пользователи» не существует

Может быть, вы используете «Пользователи» в верхнем регистре, где указано имя таблицы users ? Идентификаторы в PostgreSQL не чувствительны к регистру, если они не заключены в двойные кавычки.

Комментарии:

1. Rails создает все мои таблицы и schema.rb показывает их в нижнем регистре, поэтому этого не может быть.

2. @Simpleton: если они в нижнем регистре, то это и есть проблема. Запрос читает ALTER "Users" , а не ALTER users или ALTER Users .

3. @Simpleton: add_column(:Users, :likes, :string) это неправильно, так и должно быть add_column(:users, :likes, :string) , так что Эрвин на правильном пути.

4. Правильно. Похоже, это проблема миграции «лайков». Спасибо

5. что насчет этой ошибки, ее можно решить? == AddColumn1: migrating ===================================================== -- add_column(:users, :first_name, :string) rake aborted! An error has occurred, this and all later migrations canceled: PG::Error: ERROR: relation "users" does not exist

Ответ №2:

Похоже, что миграция предполагает, что таблица Users уже существует, чего нельзя сказать о совершенно новой базе данных PostgreSQL…

Вы забыли добавить в базу данных начальную схему?

Комментарии:

1. Возможно, в руководствах ничего подобного не было.

2. Ах, я могу прочитать из другого ответа, что вы извлекли что-то из выходных данных миграции — похоже, что AddLikesToUsers был первой миграцией, которую вы запустили 🙂

3. Да, мелочи. Хотя спасибо.