Я пытаюсь подключиться к PostgreSQL, используя сокет Unix. Я думаю, что это единственный способ подключиться к базе данных, которая находится на хосте, но приложение находится в Docker (я придерживаюсь принципа не контейнировать не реплицированную базу данных). Я использую Symfony 4 с последней версией Doctrine.
Я сделал тест на сыром PHP с PDO, и он работает. Я понятия не имею, как заставить Doctrine использовать сокет Unix.
<?php
$dbh = new PDO('pgsql:host=/var/run/postgresql;user=xxxx;dbname=zzzz;password=yyyy');
$dbh->setAttribute(PDO::ERRMODE_EXCEPTION, true);
var_dump($dbh->errorInfo());
$stmt = $dbh->query('SELECT 1 as dupa;');
$stmt->execute();
var_dump($stmt->fetchAll());
И результат такой, как и ожидалось:
www-data@ef0f2269b69a:~/html$ php o.php
array(3) {
[0]=>
string(5) "00000"
[1]=>
NULL
[2]=>
NULL
}
array(1) {
[0]=>
array(2) {
["dupa"]=>
int(1)
[0]=>
int(1)
}
}
Проблема в том, что я настраиваю в DoctrineЯ получаю это:
In PDOConnection.php line 27:
[PDOException (7)]
SQLSTATE[08006] [7] could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
Я пробовал синтаксис Doctrine, синтаксис необработанного PDO, понятия не имею. Есть ли вероятность того, что мой pdo_pgsql не имеет скомпилированной поддержки сокетов Unix?
Это то, что я пробовал в качестве URL базы данных в Doctrine:
pdo-pgsql://yyyy:xxxxx@/var/run/postgresql:5432/zzzzz
pgsql:host=/var/run/postgresql;user=xxxx;dbname=zzzz;password=yyyy
Спасибо за ваше время!