Выходные параметры хранимой процедуры Postgres 14
У меня есть несколько функций (или процедур) для простых вставок, например: insert_user(email);
Большинство из них возвращают Insert_id, будь то для других процессов или драйвера. А некоторые этого не делают, например, вставки во многие-многие таблицы без идентификатора.
Сохраненные процессы PG имеют параметры, которые кажутся обработанными стандартным способом SQL, а не функциями PG. они не являются необязательными / доступными по умолчанию, поэтому вы получаете конечный ноль каждый раз, когда вам не нужен идентификатор, например:
call insert_user('test@email', null);
Это кажется неуклюжим. Если бы я мог перегрузить его, это было бы здорово, но, что удивительно, вы не можете этого сделать с параметрами out, даже если они являются обязательной частью подписи. Я мог бы сделать вторую процедуру для каждой вставки, например:
call insert_user( 'test@email' );
call insert_user_return_id( 'test@email', out_id);
Но потом мне нужно проверять и поддерживать в два раза больше процедур. Я мог бы переключиться на функции, которым не потребуется дополнительный аргумент для out_id, и я могу игнорировать out_id, если он мне не нужен. Но функции "вставки" должны начинаться с SELECT ex:
select insert_user( 'test@email' );
select insert_user( 'test@email' ) into out_id;
select id from insert_user( 'test@email' );
И что-то насчет "выбора вставки" вызывает дискомфорт. Особенно со вставками "много-много", которые возвращают пустоту. Будем очень признательны за любые мысли или советы!