Использование currval
- правильный путь (выделение мое):
Возвращает значение, недавно полученное nextval
для этой последовательности в текущем сеансе,(Сообщается об ошибке, если nextval
никогда не вызывался для этой последовательности в этом сеансе.) Поскольку этот возвращает локальное значение сеанса, он дает предсказуемый ответ независимо от того, были ли выполнены другие сеансы nextval
с момента проведения текущего сеанса.
И оборачивание его в функцию IDENT_CURRENT
является вполне разумной техникой портирования.
Вы также можете использовать RETURNING id
в ваших операторах INSERT
(опять же, выделение мое):
Необязательное предложение RETURNING
заставляет INSERT
вычислять и возвращать значения, основанные на каждой фактически вставленной строке.Это в первую очередь полезно для получения значений, которые были предоставлены по умолчанию, таких как порядковый номер .
Это может быть немного быстрее и чище, но у вас все еще есть некоторыепроблемы переносимости.ОТО, я думаю, у вас будут проблемы с переносимостью, независимо от того, что вы делаете.