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.