Пример чтения информации о всех запросах в расширении Postgres с помощью хука ExecutorEnd_hook.
Go to file
2024-05-28 11:05:04 +03:00
.cargo initial commit 2024-05-28 11:05:04 +03:00
src initial commit 2024-05-28 11:05:04 +03:00
.gitignore initial commit 2024-05-28 11:05:04 +03:00
Cargo.toml initial commit 2024-05-28 11:05:04 +03:00
pqddlread.control initial commit 2024-05-28 11:05:04 +03:00
README.md initial commit 2024-05-28 11:05:04 +03:00

Базовый пример установки хука на 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=# -- Хук выводит всю информацию о запросе. Мы можем делать с ней что угодно.