#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. Да, мелочи. Хотя спасибо.