Недостатки или ограничения plv8?

Я играю с PLV8, чтобы написать триггер и хранимые процедуры для PostgreSQL. Пока что я не вижу недостатков по сравнению с PLPGSQL. Особенно если работать с JSON, он кажется даже умнее, чем PLPGSQL. Есть ли известные недостатки или ограничения при использовании PLV8? Может ли PLV8 быть полной заменой PLPGSQL? Было бы здорово, если бы кто-то мог поделиться своим опытом по этому вопросу.

3 ответа

Решение

Преимущества и недостатки PLV8 такие же, как преимущества и недостатки PLPerl, PLPython и других языков PL.

  • Он не интегрирован с движком PostgreSQL - результат обработки операторов SQL может быть медленнее. PLpgSQL полностью интегрирован в движок PostgreSQL.
  • SQL не интегрирован в язык - невозможно провести статический анализ встроенного SQL. Это возможно с PLpgSQL - см. Plpgsql_check.
  • Можно лучше выполнять дорогостоящие математические вычисления, манипуляции со строками и массивами обычно быстрее, чем в PLpgSQL.
  • Можно использовать библиотеки, разработанные для языков - Perl - CPAN,...
  • JavaScript, Perl, Python являются общими языками, поэтому любые общие задачи там хорошо реализованы.
  • PLpgSQL - это зрелый язык, предназначенный для манипулирования данными в среде баз данных отношений. Здесь есть почти все, что нужно разработчику для работы с данными. Итерации по результату, для получения данных из базы данных требуется меньше читаемого кода.

PLpgSQL является идеальным языком для манипулирования данными с помощью языка SQL. Другой PL лучше для всего остального - ввода-вывода, сети, специального форматирования, медленных числовых вычислений,...

ОБНОВЛЕНИЕ: так как PLV8 2.3.3 (2018-04-27) поддерживает сигналы уничтожения и работает довольно хорошо. Недостаток - вы должны построить его самостоятельно. Мы не перенесли наш код в python, так как у нас не было проблем в течение последних 3 лет.

Немного поздно, но вы не можете отменить запрос, выполняемый в данный момент сценарием plv8, единственный способ - перезапустить весь сервер postgresql. Это огромный недостаток, и наша команда думает о переходе на PLpgPython.

Чтобы перечислить еще некоторые недостатки PLpgSQL, в основном в области скорости разработки:

  • Синтаксические ошибки трудно расшифровать, напримерmismatched parentheses at or near ";". Я не получаю номер строки или какой-либо полезный контекст.
  • Нет lint, prettier, поддержки редактора или других полезных утилит, которые есть в большинстве языков.
  • Еще один язык для изучения с множеством особенностей.
  • Попытка создать объект JSON для вызова внешнего API очень сложна и подвержена ошибкам. Множество специализированных функций, таких как json_build_object, json_build_array и т. д. Вместо просто {a: 2, b: 'foo', c} в JS.
Другие вопросы по тегам