Потому что ключ - функция только от входящей даты а не от состояния базы. А вот всяческий аудит VOLATILE. А погромисты любят модульность и декомпозицию.
Мне тоже кажется, что это сбивает с толку, сама не может и это вызывает ошибку времени выполнения, но может делегировать тем кто может. Проверка первого варианта расслабляет, лучше тогда все проверки оставить на откуп автору. Иначе грабли я вчера по ним ходил собственно...
Ну вот смотрите. Вы аудит объявили как VOLATILE, потому что хотели, чтобы он вызывался обязательно для каждой строчки. Если вы его засунете в STABLE функцию, то это свойство нарушится. Если так разрешено делать, значит на самом деле функция аудита тоже STABLE
Похоже Oracle PL/SQL в этом месте с его PRAGMA WNDS RNDS более разумный.
Если бы в справке было описано, что функция STABLE допускает вызов VOLATILE, что хоть и опосредованное но все таки изменение данных, было бы легче хотя на мой взгляд это весьма спорная возможность. А в части видимости изменений тут как раз все понятно, я то думал что PostgreSQL стоит на страже так сказать, а оказалось я был не прав. 99% моих функций сами меняют данные и вызывают другие функции их меняющие и если бы они были объявлены как STABLE я сразу ловил ошибку, вот жеж коса нашлась...
Обсуждают сегодня