sql >> データベース >  >> RDS >> PostgreSQL

Ruby on RailsでPostgreSQL関数を作成できますか?

    質問のこの部分:

    PostgreSQLで手動で作成できることは知っていますが、Active Recordの「魔法」は、すべてのモデルでデータベースを再作成できることです。

    PostgreSQLの関数を通常のRails移行プロセスやdb:schema:loadなどのRakeタスクと統合する方法を本当に探していると教えてくれます。 。

    移行での関数の追加と削除は簡単です:

    def up
      connection.execute(%q(
        create or replace function ...
      ))
    end
    
    def down
      connection.execute(%q(
        drop function ...
      ))
    end
    

    別のupを使用する必要があります およびdown 単一のchangeの代わりにメソッド ActiveRecordは、関数の作成を逆にするどころか、どのように適用するかわからないためです。そして、connection.executeを使用します 生の関数定義をPostgreSQLにフィードします。 reversibleを使用してこれを行うこともできます change内 :

    def change
      reversible do |dir|
        dir.up do
          connection.execute(%q(
            create or replace function ...
          ))
        end
        dir.down do
          connection.execute(%q(
            drop function ...
          ))
        end
      end
    end
    

    しかし、upよりもノイズが多いことがわかりました およびdown

    ただし、schema.rb およびschema.rbで機能する通常のRakeタスク (db:schema:loadなど およびdb:schema:dump )PostgreSQL関数やActiveRecordが理解できないその他のことをどうするかわかりません。これを回避する方法はありますが、structure.sqlを使用することを選択できます schema.rbの代わりにファイル 設定による:

    config.active_record.schema_format = :sql
    

    config/application.rbで ファイル。その後、db:migrate db/structure.sqlを書き込みます db/schema.rbの代わりにファイル(データを含まないPostgreSQLデータベースの生のSQLダンプ) 。また、structure.sqlを操作するためにさまざまなRakeタスクを使用します :

    • db:structure:dump db:schema:dumpの代わりに
    • db:structure:load db:schema:loadの代わりに

    他のすべては同じように機能するはずです。

    このアプローチでは、ActiveRecordが理解できないデータベース内の他のものを使用することもできます:CHECK制約、トリガー、単純でない列のデフォルト、...



    1. mssqlを使用して更新および注文する方法

    2. RDLCLocalReportのExcelへのエクスポートが非常に遅い

    3. JDBCMSSQLからの戻り値の取得

    4. INSERTを失敗させるトリガー?可能?