Возможно сохранить копию запроса с определенной таблицы?
UPD Добрый день, в разрабатываемой системе нашли баг. При использовании метода бизнес логики пару таблиц в базе данных не правильно изменили свое состояние. Пока что это единичный случай, но что вызвало такое поведение до конца не понятно. При этом в логах системы все чисто. Для лучшего понимания картины, хотелось бы отловить запросы к таблице, и сравнить с временными метками в приложении. Вариант с включением общего логирования , считаю не очень хорошим, так как туда сыпяться все запросы к базе, плюс надо рестартить базу чтобы они заработали.
Вопрос, возможно ли как то с помощью тригерной функции вытащить изменения таблиц ? Желательно в обрамлении запроса. Или есть какие то другие механизмы. Чем мне нравятся тригерные функции, их можно навесить на определнную таблицу, и они не требуют перезагрузки инстанса.
В стародавние времена, был (да и сейчас есть) такой IB Expert. Он работает с firebird, но позволяет задачу логгирования изменения таблиц решает именно так - создает триггер и в нем пишет в служебную таблицу все изменения. Можете посмотреть, как он это делает и собезьянничать у него решение.
В момент выполенния запроса от текста запроса уже ничего не остается, он распаршен.
Да щас. Заботливо хранится, т.к. может потребоваться для того же логирования.
Выполняющийся в данный момент запрос клиента можно достать откуда угодно (в том числе из триггера) вызовом current_query().
Конкретную таблицу логировать удобнее да, триггером.
Это и есть query как оно пришло от клиента. Не уверен что можно дотянуться до соответствующих bind.
Но триггер же, можете из OLD и NEW достать информацию об изменяемой в данный момент строке.
В postgresql есть simple query протокол - идёт текстовый запрос и дальше развлекается база.
Есть extended protocol, состоящий из parse пакета со структурой запроса и метками под параметры, затем идёт один или несколько bind и execute пакетов. В bind передаются значения параметров, execute соответственно запускает выполнение запроса. В сам текст запроса актуальные значения параметров при этом никогда не вставляются за ненадобностью. Так же известный как server prepared statements api.