Недостатки или ограничения 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.