我正在尝试使用unix套接字连接到postgresql。我认为只有一种方法可以连接到主机上的数据库,但应用程序在docker中(我遵循的原则是不将非复制数据库容器化)。我用的是symfony 4和最新的理论。
我用pdo在原始php上做了一个测试,它可以正常工作。我不知道如何强制使用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)
}
}
问题是,无论我在条令中配置什么,我都会得到以下结果:
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?
我试过条令的语法,原始的pdo语法,没有想法。是否有可能我的pdo_pgsql没有编译unix套接字支持?
这是我在条令中尝试的数据库url:
pdo-pgsql://yyyy:xxxxx@/var/run/postgresql:5432/zzzzz
pgsql:host=/var/run/postgresql;user=xxxx;dbname=zzzz;password=yyyy
3条答案
按热度按时间pgccezyw1#
在调试了doctrine的驱动程序之后,我创建了一个不那么优雅的解决方案,但它仍然可以工作,并且可以改进。
我不喜欢在驱动程序本身中访问环境变量,但这可能是可以改进的。
亚马尔先生
postgresqldoctrinedriver.php
2cmtqfgy2#
您可以通过配置套接字
unix_socket
一段时间以前似乎可用的配置选项:https://symfony.com/doc/current/reference/configuration/doctrine.htmlwfypjpf43#
您可以将套接字路径作为主机,例如: