Как правильно вернуть hstores с PostgreSQL используя Sequel - PullRequest
0 голосов
/ 13 марта 2020

У меня есть таблица PostgreSQL с массивом hstores, 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

1 Ответ

1 голос
/ 13 марта 2020

Кажется, расширения сиквела зависят от порядка. Это работает, только если db.extension :pg_hstore называется после 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
...