使用Sequel将array_agg的结果转换为哈希或数组

时间:2015-04-13 17:54:33

标签: ruby sequel

我有一个复杂的SQL,我使用DB[sql]运行。其中一列是array_agg应用于row的结果(如下所示:array_agg(row(description, amount)::my_type)),我从DB得到的字符串如下:

"{\"(aaaa,11111111.0000000000)\",\"(bbbbb,22222222.0000000000)\",\"(vvvvvv,33333333.0000000000)\"}"

我的项目有续集,我知道pg_arraypg_row扩展,但我还没有找到一种方法将此字符串转换为哈希或数组,而不使用脏的东西如:

raw = "{\"(aaaa,11111111.0000000000)\",\"(bbbbb,22222222.0000000000)\",\"(vvvvvv,33333333.0000000000)\"}"
Hash[raw.delete('"(){}').split(',').each_slice(2).to_a].each do ... end

是否可以使用Sequel将此字符串转换为哈希或数组?

1 个答案:

答案 0 :(得分:1)

您可以使用pg_row和pg_array扩展,并将结果作为哈希(或自定义对象)数组返回。查看这些扩展的文档:

http://sequel.jeremyevans.net/rdoc-plugins/files/lib/sequel/extensions/pg_row_rb.html http://sequel.jeremyevans.net/rdoc-plugins/files/lib/sequel/extensions/pg_array_rb.html

这可能很简单:

DB.extension :pg_array, :pg_row
DB.register_row_type(:my_type)