使用 Sequel 将 array_agg 的结果转换为散列或数组

Using Sequel to convert the result of array_agg into hash or array

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

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

我的项目中有 Sequel,我知道 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 将此字符串转换为散列或数组?

您可以使用 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)