Сообщение об ошибке ясно, оно приходит из этого кода в PostgreSQL libpq
:
#ifndef USE_SSL
switch (conn->sslmode[0])
{
case 'a': /* "allow" */
case 'p': /* "prefer" */
/*
* warn user that an SSL connection will never be negotiated
* since SSL was not compiled in?
*/
break;
case 'r': /* "require" */
case 'v': /* "verify-ca" or "verify-full" */
conn->status = CONNECTION_BAD;
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("sslmode value \"%s\" invalid when SSL support is not compiled in\n"),
conn->sslmode);
return false;
}
#endif
Этот код компилируется только тогда, когда PostgreSQL был не настроен --with-openssl
.
Вы можете проверить это с помощью pg_config
(если вы не установили PostgreSQL из исходного кода, вам, возможно, придется установить пакет «dev» или «devel» для этого):
pg_config --configure
Вывод будет не содержать --with-openssl
.
Вполне возможно, что PHP построен с поддержкой SSL, а PostgreSQL - нет.
Поскольку вы говорите, что PostgreSQL скомпилирован с поддержкой SSL, одним из объяснений такого поведения является то, что на вашем компьютере установлено несколько установок PostgreSQL, и PHP использует тот, который собран без поддержки SSL. Попробуйте найти все файлы с именем libpq.*
в вашей системе!