Rails アプリ用に PG データベースを移行する必要があります。テーブルの 1 つの列の型を boolean から int に更新しています。コードは次のとおりです。
class ChangeAdminToInt < ActiveRecord::Migration def up execute ' ALTER TABLE "users" ALTER COLUMN "admin" TYPE int USING ("admin"::int) SET DEFAULT "1" ' end end
実行するbundle exec rake db:migrate
と、次のエラーが表示されます。
PG::Error: ERROR: syntax error at or near "SET" LINE 5: SET DEFAULT "1"
しかし、コードを次のように切り替えると:
class ChangeAdminToInt < ActiveRecord::Migration def up execute ' ALTER TABLE users ALTER COLUMN admin TYPE int USING (admin::int); SET DEFAULT 1 ' end end
エラーが発生します:
PG::Error: ERROR: syntax error at or near "TYPE" LINE 5: TYPE int USING ("admin"::int)
問題は関数にとどまらず、むしろ 5 行目にあるため、データベースは 5 行目を気に入らないと思います。PG が実行コマンドの一部のみを解析している引用符の長さに制限はありますか? 多くのタイプの構文、一重引用符/二重引用符、%q/%Q ブロック、引用符全体を 1 行にまとめてみましたが、構文エラーは依然として TYPE と SET DEFAULT の前の方を指しています。確かに問題は ALTER ではありません ここで何が起こっているのですか?
どんな助けでも大歓迎です。完全に明らかな何かを見逃した場合はお知らせください。ところでいくつかのGemfile:
source 'https://rubygems.org' ruby '1.9.3' gem 'rails', '~> 4.0.1.rc3' gem 'bootstrap-sass', '2.3.2.0' gem 'bcrypt-ruby', '~> 3.1.1' gem 'faker', '1.1.2' gem 'will_paginate', '3.0.4' gem 'bootstrap-will_paginate', '0.0.9' gem 'safe_attributes' group :development, :test do gem 'pg', '0.15.1' gem 'sqlite3' gem 'rspec-rails', '2.13.1' gem 'guard-rspec', '2.5.0' gem 'spork-rails', github: 'sporkrb/spork-rails' gem 'guard-spork', '1.5.0' gem 'childprocess', '0.3.6' end
そして、開発環境用の database.yml:
development: adapter: postgresql encoding: utf8 database: project_development pool: 5 username: postgres