Выходные параметры хранимой процедуры 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' );

И что-то насчет "выбора вставки" вызывает дискомфорт. Особенно со вставками "много-много", которые возвращают пустоту. Будем очень признательны за любые мысли или советы!

0 ответов

Другие вопросы по тегам