Pg version: примеры (PHP)
pg_version(?PgSql\Connection $connection = null): arrayФункция 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 'Используется актуальная версия протокола';
}Используется актуальная версия протокола
Получает значение конкретного параметра сервера. Полезна для получения отдельных настроек.
echo pg_parameter_status($conn, 'server_version');Функции pg_host(), pg_dbname(), pg_port() предоставляют информацию о соединении, но не о версиях.
pg_version() используется когда нужна комплексная информация о версиях. pg_parameter_status() подходит для получения конкретного параметра. Для информации о соединении используются соответствующие функции.
import psycopg2
conn = psycopg2.connect('dbname=test')
print(conn.server_version) # Только версия сервера
# Для полной информации используется запрос:
cursor = conn.cursor()
cursor.execute('SHOW server_version;')
print(cursor.fetchone()[0])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 используется функция VERSION()
SELECT VERSION();
-- Или переменные
SHOW VARIABLES LIKE 'version%';В 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
Параметр $connection теперь ожидает объект PgSql\Connection вместо ресурса. Передача ресурса вызывает уведомление о deprecated.
// PHP 8.0+
$conn = pg_connect('...');
// $conn теперь объект PgSql\Connection
$version = pg_version($conn);Улучшена типизцияция. Функция всегда возвращает array или false.
$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+
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);$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] => Ускоренная обработка больших данных
)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());