2017-06-26 1 views
1

Rubyを使用してPostgreSQLからbyteaカラムを読み込もうとしています。 問題は、bytea値の16進数でエンコードされた文字列を返すことです。 File.read()と同じ内容のバイナリファイルを開くのとまったく同じように返すことができます。私は私が正しくbytea列をデコードするPG::TextDecoder::Byteaを使用する必要があると思うRubyのPostgreSQL Byteaカラムを読む

require 'pg' 

conn = PG.connect(...) 
res = conn.exec('SELECT bytea_column FROM some_table') 
res.each do |r| 
    raw = r['bytea_column'] 
    puts "#{raw}" 
end 

以下は、私に進エンコードされた値を提供します。これは正しいです?もしそうなら、どのくらい正確に使用されるはずですか?

答えて

1

ありがとうございます。しかし、私はそれを理解しました。答えはPG::Connection.unescape_bytea

require 'pg' 

conn = PG.connect(...) 
res = conn.exec('SELECT bytea_column FROM some_table') 
res.each do |r| 
    raw = r['bytea_column'] 
    binary_data = PG::Connection.unescape_bytea(raw) 
    puts "#{binary_data}" 
end 
+1

Rubyで避けるべきことの1つは、「x」ではなく「#{x}」です。そのような引用符で囲む理由はありません。 'puts'は必要と感じたら文字列に変換します。 – tadman

関連する問題