Pg options: примеры (PHP)
pg_options(?PgSql\Connection $connection = null): stringФункция pg_options возвращает строку параметров подключения, ассоциированную с указанным идентификатором соединения PostgreSQL. Она применяется для получения текущих настроек подключения к базе данных.
pg_options(?resource $connection = null): string|false
Аргументы:
- connection (необязательный) - ресурс соединения с базой данных PostgreSQL. Если аргумент не передан или равен null, используется последнее установленное соединение.
Возвращаемые значения:
- Строка с параметрами подключения в формате
параметр=значение, разделенные пробелами. - false - при возникновении ошибки.
$conn = pg_connect("host=localhost port=5432 dbname=test user=postgres password=secret");
echo pg_options($conn);host=localhost port=5432 dbname=test user=postgres
pg_connect("host=192.168.1.10 dbname=mydb");
$options = pg_options();
echo $options;host=192.168.1.10 dbname=mydb
$invalid_conn = false;
$result = pg_options($invalid_conn);
var_dump($result);bool(false)
Получает текущее значение указанного параметра сервера, например server_version или client_encoding. Используется для получения отдельных настроек вместо всей строки подключения.
Эти функции возвращают отдельные компоненты подключения: хост, имя базы данных, порт и пользователя соответственно. Удобны для извлечения конкретных значений без разбора строки параметров.
Создает новое подключение и возвращает ресурс соединения. Может использоваться совместно с pg_options для проверки параметров установленного подключения.
$closed_conn = pg_connect("host=localhost");
pg_close($closed_conn);
$options = pg_options($closed_conn);
var_dump($options);bool(false)
$conn = pg_connect("host=localhost");
if (!$conn) {
echo "Не удалось подключиться";
$options = pg_options($conn);
var_dump($options);
}bool(false)
$conn = pg_connect("host=localhost password=secret123");
$options = pg_options($conn);
echo $options;host=localhost
Пароль никогда не возвращается функцией из соображений безопасности.
Начиная с PHP 8.0, функция pg_options выбрасывает исключение TypeError при передаче аргумента неподдерживаемого типа. Ранее в таких случаях возвращалось false.
// PHP 7.x и ранее
pg_options('invalid_argument'); // возвращал false
// PHP 8.0+
pg_options('invalid_argument'); // TypeErrorВ PHP 8.1 были улучшены сообщения об ошибках при работе с недействительными ресурсами соединений.
function parse_pg_options($connection) {
$optionsString = pg_options($connection);
if ($optionsString === false) return null;
$params = [];
$pairs = explode(' ', $optionsString);
foreach ($pairs as $pair) {
list($key, $value) = explode('=', $pair, 2);
$params[$key] = $value;
}
return $params;
}
$conn = pg_connect("host=127.0.0.1 port=5433 dbname=appdb");
print_r(parse_pg_options($conn));Array
(
[host] => 127.0.0.1
[port] => 5433
[dbname] => appdb
)class PGConnectionLogger {
private $connections = [];
public function connect($connectionString) {
$conn = pg_connect($connectionString);
if ($conn) {
$this->connections[] = [
'resource' => $conn,
'options' => pg_options($conn),
'time' => time()
];
}
return $conn;
}
public function getLog() {
return $this->connections;
}
}
$logger = new PGConnectionLogger();
$conn1 = $logger->connect("host=db1.example.com");
$conn2 = $logger->connect("host=db2.example.com dbname=backup");
print_r($logger->getLog());function compare_connections($conn1, $conn2) {
$opts1 = pg_options($conn1);
$opts2 = pg_options($conn2);
if ($opts1 === false || $opts2 === false) {
return false;
}
return $opts1 === $opts2;
}
$connA = pg_connect("host=localhost");
$connB = pg_connect("host=localhost");
$connC = pg_connect("host=192.168.1.1");
var_dump(compare_connections($connA, $connB));
var_dump(compare_connections($connA, $connC));bool(true) bool(false)
function recreate_connection_string($connection) {
$options = pg_options($connection);
if ($options === false) {
throw new Exception('Invalid connection');
}
// Добавляем параметры, которые не возвращаются pg_options
return $options . ' sslmode=require'; // пример добавления параметра
}
$conn = pg_connect("host=localhost user=admin");
echo recreate_connection_string($conn);host=localhost user=admin sslmode=require
import psycopg2
conn = psycopg2.connect(host='localhost', dbname='test', user='postgres')
print(conn.dsn)dbname='test' user='postgres' host='localhost'
const { Client } = require('pg');
const client = new Client({ host: 'localhost', user: 'postgres' });
console.log(client.connectionParameters);{ host: 'localhost', user: 'postgres' }Pg options в MySQL
В MySQL аналогом можно считать выполнение запроса SELECT CURRENT_USER(), DATABASE() для получения информации о текущем подключении.