Pg version: примеры (PHP)

Использование функции pg_version для получения информации о PostgreSQL
Раздел: Базы данных (PostgreSQL)
pg_version(?PgSql\Connection $connection = null): array
Описание функции pg_version

Функция pg_version() в PHP используется для получения информации о версиях клиентской и серверной части PostgreSQL, а также о версии протокола соединения. Эта функция полезна для отладки и проверки совместимости при работе с базой данных.

Функция вызывается после установления соединения с сервером PostgreSQL.

Синтаксис и параметры
pg_version(?resource $connection = null): array

$connection (необязательный) - ресурс соединения с базой данных PostgreSQL. Если параметр не указан, используется последнее соединение, открытое функцией pg_connect() или pg_pconnect(). В PHP 8.0+ можно передавать объект PgSql\Connection.

Функция возвращает ассоциативный массив с ключами:

  • client - версия клиентской библиотеки libpq
  • server - версия сервера PostgreSQL
  • protocol - версия протокола соединения
Основные примеры использования
Простое использование

Пример с установленным соединением:

$conn = pg_connect('host=localhost dbname=test user=postgres');
$version = pg_version($conn);
print_r($version);
Array
(
    [client] => 14.5
    [server] => 14.3
    [protocol] => 3
)
Использование без явного указания соединения
$conn = pg_connect('host=localhost dbname=test');
$version = pg_version();
var_dump($version['server']);
string(4) "14.3"
Проверка версии протокола
$conn = pg_connect('host=localhost');
$info = pg_version($conn);
if ($info['protocol'] >= 3) {
    echo 'Используется актуальная версия протокола';
}
Используется актуальная версия протокола
Похожие функции в PHP
pg_parameter_status()

Получает значение конкретного параметра сервера. Полезна для получения отдельных настроек.

echo pg_parameter_status($conn, 'server_version');
pg_host() и другие информационные функции

Функции pg_host(), pg_dbname(), pg_port() предоставляют информацию о соединении, но не о версиях.

Когда что использовать

pg_version() используется когда нужна комплексная информация о версиях. pg_parameter_status() подходит для получения конкретного параметра. Для информации о соединении используются соответствующие функции.

Аналоги в других языках
Python (psycopg2)
import psycopg2
conn = psycopg2.connect('dbname=test')
print(conn.server_version)  # Только версия сервера
# Для полной информации используется запрос:
cursor = conn.cursor()
cursor.execute('SHOW server_version;')
print(cursor.fetchone()[0])
JavaScript (node-postgres)
const { Client } = require('pg');
const client = new Client();
await client.connect();
// Запрос напрямую к серверу
const res = await client.query('SELECT version();');
console.log(res.rows[0].version);
MySQL
-- В MySQL используется функция VERSION()
SELECT VERSION();
-- Или переменные
SHOW VARIABLES LIKE 'version%';
Отличия от PHP

В PHP функция pg_version() предоставляет структурированные данные без необходимости выполнения SQL-запросов. В других языках часто требуется прямой запрос к системным функциям БД.

Типичные ошибки
Неверное соединение
$version = pg_version(123);
var_dump($version);
Warning: pg_version(): supplied argument is not a valid PostgreSQL link resource
bool(false)
Отсутствующее соединение
// Нет активных соединений
$version = pg_version();
var_dump($version);
Warning: pg_version(): Unable to fetch PostgreSQL connection in ...
bool(false)
Попытка использования после закрытия соединения
$conn = pg_connect('host=localhost');
pg_close($conn);
$version = pg_version($conn);
Warning: pg_version(): supplied resource is not a valid PostgreSQL link resource
Изменения в версиях PHP
PHP 8.0

Параметр $connection теперь ожидает объект PgSql\Connection вместо ресурса. Передача ресурса вызывает уведомление о deprecated.

// PHP 8.0+
$conn = pg_connect('...');
// $conn теперь объект PgSql\Connection
$version = pg_version($conn);
PHP 8.1

Улучшена типизцияция. Функция всегда возвращает array или false.

Расширенные примеры
Сравнение версий для проверки совместимости
Пример php
$conn = pg_connect('host=localhost');
$versions = pg_version($conn);

$server_ver = $versions['server'];
$client_ver = $versions['client'];

// Извлечение основных номеров версий
preg_match('/^(\d+)\.(\d+)/', $server_ver, $server_match);
preg_match('/^(\d+)\.(\d+)/', $client_ver, $client_match);

if ($server_match[1] > 13 && $client_match[1] > 13) {
    echo 'Поддерживаются функции PostgreSQL 14+';
} else {
    echo 'Требуется обновление клиента или сервера';
}
Поддерживаются функции PostgreSQL 14+
Логирование информации о соединении
Пример php
function logConnectionInfo($connection) {
    $info = pg_version($connection);
    
    $log_data = [
        'timestamp' => date('Y-m-d H:i:s'),
        'server_version' => $info['server'],
        'client_version' => $info['client'],
        'protocol' => $info['protocol']
    ];
    
    file_put_contents('db_connections.log', 
        json_encode($log_data) . PHP_EOL, 
        FILE_APPEND);
    
    return $info;
}

$conn = pg_connect('host=localhost');
$versions = logConnectionInfo($conn);
Определение доступных функций по версии
Пример php
$conn = pg_connect('host=localhost');
$versions = pg_version($conn);
$server_ver = (float) substr($versions['server'], 0, 3);

$features = [];
if ($server_ver >= 14.0) {
    $features[] = 'Поддержка многовариантного секционирования';
}
if ($server_ver >= 13.0) {
    $features[] = 'Ускоренная обработка больших данных';
}

print_r($features);
Array
(
    [0] => Поддержка многовариантного секционирования
    [1] => Ускоренная обработка больших данных
)
Интеграция с мониторингом
Пример php
class PostgreSQLMonitor {
    private $connections = [];
    
    public function addConnection($name, $connection) {
        $this->connections[$name] = [
            'resource' => $connection,
            'version_info' => pg_version($connection)
        ];
    }
    
    public function getReport() {
        $report = [];
        foreach ($this->connections as $name => $data) {
            $report[$name] = [
                'server' => $data['version_info']['server'],
                'client' => $data['version_info']['client'],
                'protocol_match' => $data['version_info']['client'] === $data['version_info']['server']
            ];
        }
        return $report;
    }
}

$monitor = new PostgreSQLMonitor();
$conn1 = pg_connect('host=server1');
$monitor->addConnection('main_db', $conn1);

print_r($monitor->getReport());

PHP pg_version function comments

En
Pg version Returns an array with client, protocol and server version