Пример чтения информации о всех запросах в расширении Postgres с помощью хука ExecutorEnd_hook.
.cargo | ||
src | ||
.gitignore | ||
Cargo.toml | ||
pqddlread.control | ||
README.md |
Базовый пример установки хука на ExecutorEnd_hook
. Для наглядности в примере сразу вызывается сбой после завершения выполнения любого запроса.
Как выглядит работа:
psql (13.15)
Type "help" for help.
pqddlread=# create extension pqddlread;
CREATE EXTENSION
pqddlread=# -- Хук пока не установлен, все запросы выполняются.
pqddlread=# select 1;
?column?
----------
1
(1 row)
pqddlread=# -- Устанавливаем хук. Он сразу же заработает т.к. на момент завершения вызова функции хук уже стоит.
pqddlread=# select pqddlread();
ERROR: This panic indicates that hook was called successfully. Last query info: QueryDesc { operation: 1, plannedstmt: 0x5f9ec2a32650, sourceText: 0x5f9ec2958740, snapshot: 0x5f9ec29df648, crosscheck_snapshot: 0x0, dest: 0x5f9ec2a327c0, params: 0x0, queryEnv: 0x0, instrument_options: 0, tupDesc: 0x5f9ec2a2c3b0, estate: 0x5f9ec2a2bf70, planstate: 0x5f9ec2a2c1a8, already_executed: true, totaltime: 0x0 }
pqddlread=# -- Теперь ВСЕ запросы сломаны :)
pqddlread=# select 1;
ERROR: This panic indicates that hook was called successfully. Last query info: QueryDesc { operation: 1, plannedstmt: 0x5f9ec2a32458, sourceText: 0x5f9ec2958740, snapshot: 0x5f9ec2a1c868, crosscheck_snapshot: 0x0, dest: 0x5f9ec2a325c8, params: 0x0, queryEnv: 0x0, instrument_options: 0, tupDesc: 0x5f9ec29dfa50, estate: 0x5f9ec29df610, planstate: 0x5f9ec29df848, already_executed: true, totaltime: 0x0 }
pqddlread=# -- Хук выводит всю информацию о запросе. Мы можем делать с ней что угодно.