启用 PostgreSQL 连接的追踪

# pg_trace

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

pg_trace — 启用 PostgreSQL 连接的追踪

### 说明

function pg_trace(
string `$filename`,
string `$mode` = "w",
?PgSql\Connection `$connection` = `null`,
int `$trace_mode` = 0
): bool

pg_trace() 启用 PostgreSQL 前后端通讯的追踪并记录到文件。要完全理解结果，需要熟悉 PostgreSQL 通讯协议的内部工作原理。

对不熟悉的人来说，追踪发送到服务器的查询错误依然有用，例如可以用 grep '^To backend' trace.log 来查看实际发送到 PostgreSQL 服务器的查询。更多信息参考 » PostgreSQL 手册。

### 参数

`filename`

  写入追踪日志的文件完整路径和文件名，与 fopen() 一致。

`mode`

  可选的文件访问模式，同 fopen()。

`connection`

  An PgSql\Connection instance. When `connection` is `null`, the default connection is used. The default connection is the last connection made by pg_connect() or pg_pconnect().

  警告

  As of PHP 8.1.0, using the default connection is deprecated.

`trace_mode`

  可选的 trace 模式，使用下列常量 `PGSQL_TRACE_SUPPRESS_TIMESTAMPS` 和 `PGSQL_TRACE_REGRESS_MODE`

### 返回值

成功时返回 `true`， 或者在失败时返回 `false`。

### 更新日志

版本 | 说明
--- | ---
8.3.0 | 新增 `trace_mode`。
8.1.0 | 现在 `connection` 参数接受 PgSql\Connection 实例，之前接受 resource。
8.0.0 | `connection` 现在可为 null。

### 示例

示例 #1 pg_trace() 示例

    <?php
    $pgsql_conn = pg_connect("dbname=mark host=localhost");

    if ($pgsql_conn) {
       pg_trace('/tmp/trace.log', 'w', $pgsql_conn);
       pg_query("SELECT 1");
       pg_untrace($pgsql_conn);
       // Now /tmp/trace.log will contain backend communication
    } else {
       print pg_last_error($pgsql_conn);
       exit;
    }
    ?>

### 参见

- fopen() - 打开文件或者 URL
- pg_untrace() - 禁用 PostgreSQL 连接的追踪

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open