Postgresql
March 24, 2023
PostgreSQL URL Encoding (PL/pythonu3).
Внезапно возникла задача формирования запросов к REST API из Pentaho DI. Есть несколько вариантов это сделать - степы REST Client в трансформации, Run SSH Commands, Execute a process.
С REST Client на раз не завелось, завелось с исполнением CURL через Execute a process. Но нужно было параметры запроса привести к URL. И проще всего для уже существующего пайплайна это было сделать на уровне PostgreSQL. Но увы, в самом PG "из коробки" нет ни аналога функции javascript encodeURI(), ни java.net.URLEncoder.encode() метода java.
Пришлось писать функцию на pl/python.
CREATE OR REPLACE FUNCTION public.encode_str_2_url(p_str_in text) RETURNS text LANGUAGE plpython3u IMMUTABLE STRICT AS $function$ import urllib.parse as up return up.quote(p_str_in); $function$;
Создавать функцию нужно как суперпользователь. И до того нужно "включить" расширение командой CREATE EXTENSION plpython3u.