Хранить и индексировать YAML с помощью PostgreSQL, с помощью Javascript lib или многоразовых функций?

PostgreSQL 9.2 имеет встроенную поддержку JSON. Однако я хотел бы хранить понятные человеку файлы конфигурации в YAML. И я думаю, что я хотел бы проиндексировать некоторые (но не все) значения файла конфигурации. Поэтому мне интересно

  1. Можно ли каким-то образом включить в Postgres [стороннюю библиотеку Javascript, которая анализирует Yaml], например, js-yaml. Тогда у меня мог бы быть свой собственный помощник по JAMascript YAML, точно так же, как есть встроенный помощник JSON в PostgreSQL 9.2.

В качестве альтернативы:

  1. Можно ли объявить отдельные повторно используемые функции Javascript? Если так, то я мог бы добавить свои собственные функции синтаксического анализа YAML (основанные на простых регулярных выражениях), которые могут анализировать подмножество YAML, например пары ключ-значение верхнего уровня здесь:

    # some "top level key-value paris":
    the_key: 'the value'
    another_key: 'another value'
    # But this however:
    would_be_too_complicated_to_parse_manually_with_regexps: |
      block string
      with newlines
    

В худшем случае мне нужно будет дублировать код синтаксического анализа YAML в каждой хранимой процедуре PostgreSQL (если я не могу добавить сторонние библиотеки или объявить многократно используемые функции).

(Производительность не будет очень важна в моем случае.)

(Я некоторое время гуглял для " многократно используемой функции postgresql plv8 " и " библиотеки postgresql plv8 ", но не нашел ничего релевантного)

1 ответ

Решение

Процедурный язык pl/v8 - это, вероятно, правильный путь. Это "доверенный" язык, который означает (помимо прочего), что он не предоставляет какого-либо способа "загрузить внешний модуль из этого файла". Но у него есть метод 'find_function()', который позволяет вам определять свою собственную функцию javascript и вызывать ее из другой функции (js или нет). Смотрите описание этого в этом сообщении в блоге:
http://umitanuki.hatenablog.com/entry/2012/04/10/171935

Другие вопросы по тегам