7

バイナリ データをデータベースに格納しようとしています。(heroku の postgresql)

postgresql にバイナリ データを格納するには、2 つの異なる方法があることを理解しています。ブロブとバイティー..

移行でテーブルを作成すると、

create_table :binaries do |t|
  t.binary :data
end

データベースに bytea 型の列を作成します。

私の質問は.. タイプ blob のレコードを作成するにはどうすればよいですか?

なぜ私は尋ねるのですか?10バイトのファイルをherokuに送信すると、「e」を先頭に追加した16進値の文字列として保存されるようです..私の10バイトは21になります.10メ​​ガのファイルは20メガになります(そして1バイト), ext, ext, ext...
今は気になりますが、パフォーマンスはあまり気にしません。(私は首相によって私を打ちのめされました)、それは私を最も悩ませているものではありません.
本当に気になるのは; データベースの内容を読み取ると、10 バイトではなく 21 バイトになります。これは使用できません。

もう一度質問です。rails/postgresql/heroku 環境で BLOB 列を作成するにはどうすればよいですか?

4

2 に答える 2

11

byteaBLOB の PostgreSQL 版です。細かいマニュアルから:

BLOBSQL 標準では、 orと呼ばれる別のバイナリ文字列型が定義されていますBINARY LARGE OBJECT。入力形式は とは異なりますbyteaが、提供される関数と演算子はほとんど同じです。

あなたbyteaが望むものもそうです。フォーマットに関する限り:

このbytea型は、入力と出力の 2 つの外部形式をサポートしています: PostgreSQL の歴史的な「エスケープ」形式と「16 進」形式です。これらはどちらも入力時に常に受け入れられます。出力形式は構成パラメーター bytea_output によって異なります。デフォルトは 16 進数です。(16 進形式は PostgreSQL 9.0 で導入されたことに注意してください。以前のバージョンと一部のツールはそれを理解していません。)

したがって、表示されているのは、データベースにデータを出し入れするために使用されるテキスト バージョンだけです。

これも興味深いかもしれません:

于 2012-07-12T05:30:00.827 に答える
3

Blob ストレージは Postgres に組み込まれており、ActiveRecord アダプターを使用してサポートされていますが、未加工の接続とlo_*メソッドを介して直接のみサポートされています。lo_write, lo_open, lo_close and lo_readブロブの作成と操作に使用できます。ブロブを作成すると、モデルでブロブを参照できる OID が返されます。

移行を使用してこれを追加できます

rails g migration AddFileToModel file:oid

または直接このように

add_column :users, :avatar, :oid

この実際の例については、Carrierwave PostgreSQL gemを参照してください。そのコードに基づいてカスタム ソリューションを構築することも、Carrierwave を直接使用することもできます。私は現在それを使用しており、うまく機能しています。

于 2014-08-07T21:16:06.627 に答える