Вероятно, вам лучше всего использовать INSERT INTO questions ... VALUES (1,1,1) RETURNING audit_id
, поскольку это даст вам правильное значение, независимо от того, вставляете ли вы значение вручную или через последовательность.
Обратите внимание, что уловка currval()
, безусловно, должна работать, если вы получаете тот же сеанс - currval()
гарантированно вернет то же значение, что и последовательность, доставленная в ваш сеанс, независимо от того, что делают другие параллельные сеансы. Это может вызвать проблему только в том случае, если у вас есть пул соединений, который каким-то образом использует соединение для первого запроса, отличного от второго запроса, но если он это сделает, он будет довольно поврежден. Я не знаю ни одного пулера, который бы так поступал.
Обновление : См. Функцию pg_get_serial_sequence (), которая берет имя таблицы и столбца и возвращает имя связанной последовательности. Это более практично, чем жесткое кодирование имени последовательности в вашем коде.