使用 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_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 将此字符串转换为散列或数组?
您可以使用 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)
我有一个复杂的 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_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 将此字符串转换为散列或数组?
您可以使用 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)