2017-06-26 4 views
1

J'essaye de lire une colonne bytea de PostgreSQL en utilisant Ruby. Le problème est qu'il renvoie la chaîne codée en hexadécimal de la valeur bytea. Je voudrais qu'il retourne exactement la même chose que si j'ouvrais un fichier binaire avec le même contenu avec File.read().Lire la colonne PostgreSQL Bytea dans Ruby

Ce qui suit me donne la valeur codée hexagonale:

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 

Je pense que je dois utiliser PG::TextDecoder::Bytea pour décoder correctement la colonne bytea. Est-ce correct? Et si oui, comment exactement est-il censé être utilisé?

Répondre

1

Merci à tous mais je l'ai compris. La réponse est 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

Une chose à éviter dans Ruby est de faire "# {x}" 'au lieu de' x'. Il n'y a aucune raison d'entourer quelque chose entre guillemets comme ça. 'puts' va se convertir en une chaîne s'il le juge nécessaire. – tadman