Pg trace: примеры (PHP)
pg_trace(string $filename, string $mode = "w", ?PgSql\Connection $connection = null): boolФункция pg_trace в PHP активирует трассировку соединения с базой данных PostgreSQL. Она записывает отладочную информацию о взаимодействии клиента и сервера в указанный файл. Использование функции происходит при необходимости анализа SQL-запросов, отладке проблем производительности или изучении протокола обмена данными.
Функция принимает три параметра:
- filename (string) - путь к файлу для записи трассировки. Если файл существует, он будет перезаписан.
- mode (string) - режим записи в файл. По умолчанию 'w' (перезапись). Может быть 'a' для добавления в конец файла.
- stream_context (resource) - контекст потока для файловых операций. Используется редко.
Активация трассировки в новый файл:
$connection = pg_connect('host=localhost dbname=test');
$result = pg_trace('/path/to/trace.log', 'w');
if ($result) {
echo 'Трассировка начата';
}
pg_query($connection, 'SELECT 1');
pg_untrace($connection);Трассировка начата
pg_trace('/path/to/trace.log', 'a');
pg_query($connection, 'SELECT 2');Альтернативой для отладки может служить функция pg_options для установки параметров соединения, включая отладочные. Расширение pgsql также предоставляет функции pg_last_error и pg_result_error для получения сообщений об ошибках. Для трассировки на уровне приложения используют PDO с активированным атрибутом PDO::ATTR_ERRMODE.
import psycopg2
import logging
logging.basicConfig(filename='trace.log', level=logging.DEBUG)
# В psycopg2 нет прямой аналогии, используют логированиеconst { Client } = require('pg');
const client = new Client();
// Активация логирования запросов
client.on('query', (query) => console.log(query));// В MySQLi нет встроенной трассировки, используют логирование сервераpg_trace('/nonexistent/trace.log');Warning: pg_trace(): Failed to open stream
$result = pg_trace('/tmp/trace.log'); // Нет активного соединенияФункция вернет false
В PHP 8 функция pg_trace не претерпела значительных изменений. Сохранена обратная совместимость. Добавлена строгая типизация для аргументов.
pg_trace('/path/to/trace.log');
$res = pg_query($connection, 'SELECT * FROM users WHERE id = 1');
while ($row = pg_fetch_assoc($res)) {
print_r($row);
}
pg_untrace($connection);// Файл содержит бинарные и текстовые данные протокола PostgreSQL
$traceContent = file_get_contents('/path/to/trace.log');
echo 'Размер файла: ' . strlen($traceContent) . ' байт';