如何使用 Sequel 从 PostgreSQL 正确地 return hstores

How to return hstores correctly from PostgreSQL using Sequel

我有一个带有 hstores 数组的 PostgreSQL table,hstore[],我正在使用 Sequel,但它不起作用。

它返回 hstore 数组的原始字符串表示,所以当我调用

DB[:invoices][id: 1337].line_items

我得到:

"{\"\\"amount\\"=>\\"795\\", \\"description\\"=>\\"Box\\"\",\"\\"amount\\"=>\\"200\\", \\"description\\"=>\\"Shipping\\"\"}"

而不是:

[{'amount' => 795, 'description' => 'Box' ...}]

我正在使用以下方式连接到数据库:

DB = Sequel.connect(ENV.fetch('DATABASE_URL')).tap do |db|
  Sequel.extension :pg_hstore_ops
  db.extension :pg_hstore
  db.extension :pg_array
  db.extension :pg_json
  db.extension :pg_streaming
end

似乎 Sequel 扩展是依赖于顺序的。这仅在 db.extension :pg_hstore 被称为 after db.extension :pg_array.

时有效

所以数据库的配置块应该是:

DB = Sequel.connect(ENV.fetch('DATABASE_URL')).tap do |db|
  Sequel.extension :pg_hstore_ops
  db.extension :pg_array
  db.extension :pg_hstore # This is now after :pg_array!
  db.extension :pg_json
  db.extension :pg_streaming
end