我正在尝试使用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
列。它是否正确?如果是这样,它究竟应该如何使用?
答案 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