アダプターの1つとともにRailsに付属するActiveRecordを使用する場合、発生するデータベースタイプからRailsまたはRubyタイプへの唯一の正式なマッピングは、通常、NATIVE_DATABASE_TYPES
で定義されます。 native_database_types
を介して返されるアダプター内の定数 方法。 Rails 3.2.xのPostgreSQLの場合、それはActiveRecord::ConnectionAdapters::PostgreSQLAdapter
にあります これは
移行
Jim Devilleがコメントで述べたように、次のようにテーブルにカスタム型付き列を指定できます。
t.column :some_oid, 'blob_oid', :null => false
非標準の処理をさらに行う必要がある場合は、execute("SQL GOES HERE;")
を使用することもできます。 ストレートSQLを使用してテーブルを作成します。また、移行以外で行われた既存のレガシースキーマまたはSQLの変更がある場合は、structure.sql(config.active_record.schema_format = :sql
)の使用を検討してください。 config/application.rb
のオプション 次に、次の操作を行います。rake db:structure:dump
。
大きなオブジェクトの読み取り/書き込み/長さの確認/削除
更新 :PGドキュメント 「トランザクションの終了時に開いたままの大きなオブジェクト記述子は、自動的に閉じられます。」 (その情報を提供してくれたDiogoに感謝します)
require 'pg'
...
def read
(...).transaction do
lo = connection.lo_open(identifier)
content = connection.lo_read(lo, file_length)
connection.lo_close(lo)
content
end
end
def write(file)
(...).transaction do
lo = connection.lo_open(identifier, ::PG::INV_WRITE)
size = connection.lo_write(lo, file.read)
connection.lo_close(lo)
size
end
end
def delete
connection.lo_unlink(identifier)
end
def file_length
(...).transaction do
lo = connection.lo_open(identifier)
size = connection.lo_lseek(lo, 0, 2)
connection.lo_close(lo)
size
end
end
connection
の代わりに 、モデルまたはベースからの生の接続を使用します。 ActiveRecord::Base.connection.raw_connection
(これ
を参照してください。 。
(...).transaction
モデルまたはベースでトランザクションを呼び出しています。 ActiveRecord::Base.transaction
(これ
を参照してください。 。
identifier
は、渡す/設定するか、connection.lo_creat
を実行するだけで取得する必要があるOIDです。 。
その他の例/情報:
- http://rubydoc.info/github/nedforce/devcms-core/ DbFile
- https://github.com/nedforce/devcms-core
- http://my.safaribooksonline.com/ book / web-development / ruby / 9780596510329 / database / largebinary_objects
後者といくつかの回答
簡単な方法
CarrierWave
を使用するだけです および