1

Rails 3.0.2 のプロジェクトがあります。そのかなり大きく、MySQL データベースでうまく機能します。しかし、SQLite データベースで実行しようとすると、移行中にエラーが発生します。

SQLite3::SQLException: near "CASCADE": syntax error: DROP TABLE "table_name" CASCADE

検索したところ、おそらく'PRAGMA foreign_keys = ON'SQLite が役立つことがわかりました。'execute("PRAGMA foreign_keys = ON")'そのため、直前に移行を追加しようとしまし'DROP TABLE table_name'たが、これは役に立ちませんでした。

Rails3でSQLiteのforeign_keysをオンにする方法は?

宝石のバージョン

  • sqlite3 (1.3.6)
  • sqlite3-ルビー (1.3.3)
4

1 に答える 1

0

SQLiteのDROPTABLEの構文図は次のとおりです。

ここに画像の説明を入力してください

画像が移動する場合の構文は次のようになります。

drop table if exists db_name.table_name

ここで、if existsおよびdb_name.パーツはオプションです。そこにはCASCADEがないため、DROP TABLEを使用する場合にSQLiteはCASCADEをサポートせず、追加するためにできることは何もありません(もちろん、SQLite Cソースをハックして自分で追加する場合を除きます)。SQLiteを使用する場合は、特定の制限を受け入れる必要があります。これはその1つです。

SQLiteとMySQLの両方に1つの移行を使用する場合は、使用されているデータベースを確認して適切なSQLを実行するか、どこでも機能するものを見つける必要があります(つまり、手動でCASCADEを実行します)。現在使用しているデータベースを確認する簡単な方法は、次のとおりです。

case connection
when ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
    # PostgreSQL things go here
when ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
    # MySQL things go here
when ActiveRecord::ConnectionAdapters::SQLiteAdapter
    # SQLite things go here
...
end
于 2012-06-03T18:47:29.300 に答える