открытой транзакции должны быть видны в этой транзакции. Это вроде логично, но возможны ситуации при которых это не так? Поясню ситуацию у меня функция вызываемая в теле функции добавляет запись в таблицу, но когда я пытаюсь ее получить обратно вижу NULL, однако после завершения транзакции(общей вызывающей функции я вижу запись) по моему так не должно быть?
Не должно. Но если у вас какой-нибудь пулер неправильно настроенный в середине — то можэт.
Вместо тысячи слов нужен пример кода.
Функции не immutable/stable случайно? Попробуйте поменять на volatile https://www.postgresql.org/docs/current/xfunc-volatility.html
У функций stable не крутится снапшот, поэтому они могут возвращать одно и то же STABLE and IMMUTABLE functions use a snapshot established as of the start of the calling query, whereas VOLATILE functions obtain a fresh snapshot at the start of each query they execute.
Функция вносит изменения в таблицы, так что изначально проектировалась как volatile. Я обошел проблему получив необходимые данные на основе записей присутствующих в таблице, но вопрос для мене остался открытым. Я не первый раз делаю вложенный вызов функции но первый раз сталкиваюсь с ситуацией когда не могу получить из таблицы произведенные ей изменения которые там совершенно точно есть. Спасибо за советы буду сам ковырять.
Нехороший копипаст... Да я лепил эту функцию из селектовой STABLE и действительно не поменял на VOLATILE, вот жеж... 🤯🖖
Обсуждают сегодня