阅读Ruby中的PostgreSQL Bytea专栏

时间:2017-06-26 15:16:13

标签: ruby-on-rails ruby postgresql binaryfiles binary-data

我正在尝试使用Ruby从PostgreSQL中读取bytea列。 问题是它返回bytea值的十六进制编码字符串。 我希望它返回完全相同,就像我打开一个与File.read()具有相同内容的二进制文件一样。

以下给出了十六进制编码值:

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

我认为我需要使用PG::TextDecoder::Bytea正确解码bytea列。它是否正确?如果是这样,它究竟应该如何使用?

1 个答案:

答案 0 :(得分:2)

谢谢大家,但我明白了。答案是CREATE TABLE IF NOT EXISTS `Item` ( `id` int(11) NOT NULL, `name` varchar(50) NOT NULL, `creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `ItemTag` ( `id` int(11) NOT NULL, `priority` int(10) unsigned NOT NULL DEFAULT '10', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `ItemHasItemTag` ( `itemId` int(10) unsigned NOT NULL, `tagId` int(10) unsigned NOT NULL, PRIMARY KEY (`itemId`,`tagId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `Item` (`id`, `name`, `creation`) VALUES (1, 'item1', '2017-06-26 16:48:54'),(2, 'item2', '2017-06-23 16:48:54'),(3, 'item3', '2017-06-29 16:49:42'),(4, 'item4', '2017-06-15 16:50:31'),(5, 'item5', '2017-06-09 16:50:44'),(6, 'item6', '2017-06-12 16:50:57'); INSERT INTO `ItemTag` (`id`, `priority`) VALUES (1, 10),(2, 999),(3, 15),(4, 8); INSERT INTO `ItemHasItemTag` (`itemId`, `tagId`) VALUES (1, 1),(1, 2),(2, 1),(2, 3),(3, 4),(4, 1),(4, 4),(5, 1),(5, 2),(5, 3),(6, 2);

PG::Connection.unescape_bytea