我有一个复杂的SQL,我使用DB[sql]
运行。其中一列是array_agg
应用于row
的结果(如下所示:array_agg(row(description, amount)::my_type)
),我从DB
得到的字符串如下:
"{\"(aaaa,11111111.0000000000)\",\"(bbbbb,22222222.0000000000)\",\"(vvvvvv,33333333.0000000000)\"}"
我的项目有续集,我知道pg_array
和pg_row
扩展,但我还没有找到一种方法将此字符串转换为哈希或数组,而不使用脏的东西如:
raw = "{\"(aaaa,11111111.0000000000)\",\"(bbbbb,22222222.0000000000)\",\"(vvvvvv,33333333.0000000000)\"}"
Hash[raw.delete('"(){}').split(',').each_slice(2).to_a].each do ... end
是否可以使用Sequel将此字符串转换为哈希或数组?
答案 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)