Выполнение миграции на новой базе данных приводит к следующей ошибке.
>> rake db:drop; rake db:create:all; rake db:migrate
1 activity-image-additions-!?
== CreateSomething: migrating ================================================
-- create_table(:somethings)
-> 0.0042s
== CreateSomething: migrated (0.0043s) =======================================
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::UndefinedColumn: ERROR: column "id" does not exist
LINE 1: ...O "schema_migrations" ("version") VALUES ($1) RETURNING "id"
^
: INSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "id
Сгенерированный SQL-запрос не должен включать RETURNING "id"
, поскольку таблица schema_migrations не имеет идентификаторов.
Если я попытаюсь перенести базу данных после сбоя, это будет успешным:
>> rake db:migrate
== CreateSomething: migrating ================================================
-- create_table(:somethings)
-> 0.0041s
== CreateSomething: migrated (0.0042s) =======================================
В настоящее время я использую PostgreSQL 9.2.4, Rails 4.0.0, pg gem 0.16.0 на OS X 10.8.
Единственная миграция:
class CreateSomething < ActiveRecord::Migration
def change
create_table :somethings do |t|
t.integer :x
t.integer :y
end
end
end
Примечание: я пробовал эту миграцию в других проектах Rails, и она работает. Что-то еще не так, но я не уверен, с чего начать.
Трассировка стека доступна на pastebin.
schema_migrations
используется системой миграций для отслеживания того, какие миграции были запущены, в ней должен быть один столбецversion varchar(255) not null
. Есть ли шанс увидеть трассировку стека от этого исключения? - person mu is too short   schedule 06.08.2013RETURNING "id"
... - person fny   schedule 06.08.2013