Перевести сериализованную строку вложенного массива в массив postgres в rails - PullRequest
0 голосов
/ 21 марта 2019

В Rails 5.0 у нас есть атрибут модели, сериализованный в строки YAML, которые принимают вложенные массивы:

class Foo
  serialize :foos, Array
end

Если я посмотрю на пример myFoo.foos в базе данных, он может выглядеть так:

---
- - Foo A
- - Foo B 1
  - Foo B 2
  - Foo B 3

или в рельсах это будет: [['Foo A'], ['Foo B 1', 'Foo B 2', 'Foo B 3']]

Мое желание - создать миграцию столбцов, переместив ее из сериализованного текста в тип массива Postgres.

Если бы это не было вложенными массивами, мы могли бы сделать что-то подобное в миграции:

change_column :foos, :foos, :string, array: true, default: [], using: "(string_to_array(foos, ','))"

Но это не работает для вложенных массивов; он создаст один массив с сериализованным фрагментом внутри, что-то вроде:

["---\n- - Foo 1\n- - Foo 2 A\n  - Foo 2 B\n  - Foo 2 C"]

Какие-нибудь идеи магии postgres, которые могут выполнять string_to_array вложенным способом? Я пробовал unnest, но это не позволяет вам вернуть набор в преобразование, поэтому я в растерянности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...