Модно запоздалый ответ, но рассмотрели ли вы какую-то реализацию сокращения Integer
? Если единственная цель состоит в том, чтобы сделать идентификатор пользователя как можно короче, мне было бы интересно узнать, есть ли какая-либо другая очевидная причина, по которой вам требуется только шестнадцатеричное преобразование, если я не пропустил его, конечно. Является ли ясным и известным (если это требуется), что идентификаторы пользователей на самом деле представляют собой шестнадцатеричное представление реального значения?
Вы можете получить информацию из стека вызовов, используя get diagnostics
, как описано здесь здесь .
Что-то вроде этого:
CREATE OR REPLACE FUNCTION func1()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
declare
stack text;
begin
get diagnostics stack = pg_context;
raise notice E'--- Call Stack ---\n%',stack;
...
return new;
end;
$function$;
Функция тестирования:
CREATE OR REPLACE FUNCTION insertnewrecord()
RETURNS void
LANGUAGE plpgsql
AS $function$
begin
insert into TableA values(...);
end;
$function$
И результат:
select insertnewrecord();
NOTICE: --- Call Stack ---
PL/pgSQL function func1() line 6 at GET DIAGNOSTICS
SQL statement "insert into tbl values(10)"
PL/pgSQL function insertnewrecord() line 3 at SQL statement
CONTEXT: SQL statement "insert into tbl values(10)"
PL/pgSQL function insertnewrecord() line 3 at SQL statement
insertnewrecord
-----------------
(1 row)
Итак, вы можете анализировать stack
в func1 () и принимать на нем решения, хотя это не очень удобно.