13

ActiveRecord と PostgreSQL で Ruby on Rails を使用しています。

複数の SQL クエリを実行するにはどうすればよいですか?

カスタム移行スクリプトを実行するために必要です。

Foo.connection.execute <<-SQL.split(';').map(&:strip).join
 delete from metadata where record_type = 'Foo';
 TRUNCATE table1 RESTART IDENTITY;
 TRUNCATE table2 RESTART IDENTITY;
 delete from schema_migrations where version > '20120806120823';
SQL

私はユーザーからのデータを受け入れていないので、SQL インジェクションについて心配していません。

CLIENT_MULTI_STATEMENTSたぶんMySQLのようなものですか?

MySQL/PHP ドキュメントから:

CLIENT_MULTI_STATEMENTS : クライアントが単一の文字列で複数のステートメントを送信できることをサーバーに伝えます (「;」で区切られます)。このフラグが設定されていない場合、複数ステートメントの実行は無効になります。このフラグの詳細については、この表の後の注を参照してください。

4

3 に答える 3

9

pg gem と rails 3.2 でチェックした PostgreSQL でそのまま使用できるはずです。

class Multitest < ActiveRecord::Migration
  def up
    execute <<-SQL
      create table x(id serial primary key);
      create table y(id serial primary key, i integer);
    SQL
  end

  def down
  end
end

ちなみに、直接操作schema_migrationsするのは奇妙に見えます。

于 2012-08-20T12:59:43.830 に答える