powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php, подключение к базе через pgbouncer и сокет
6 сообщений из 6, страница 1 из 1
php, подключение к базе через pgbouncer и сокет
    #39966868
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
На старом железе тестовая система: centos8, nginx, php-fpm, postgresql-12, pgbouncer.
Последний не получается настроить, точнее не работает через сокет (вариант_2):

$dsn = "host=127.0.0.1 port=6432 dbname=postgres user=postgres password=***"; // 1. так работает
$dsn = "host=/tmp port=6432 dbname=postgres user=postgres password=***"; // 2. не работает

Код файла php простой - в таблицу базы вносятся тестовые данные: временные метки коннекта и инсертов ...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
   Расположение, файл: /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php
   ...

   $conn = pg_connect($dsn);
   //-------------------------------------------------------------------------------------------------------------------------------------------
   $t02 = (microtime(true) - $start_time)*1000;

   if ($d00 !== 'upd') {

   $in1 = pg_query($conn, "INSERT INTO public.v1_bouncer (metka) VALUES ('".$d00."') RETURNING idv1;");

   $t03 = (microtime(true) - $start_time)*1000;
   $rid = pg_fetch_row($in1);
   $t22 = $t02-$t01;

   $in2 = pg_query($conn, "INSERT INTO public.v2_timing (fk_idv1, t01, t02, t03) VALUES ($rid[0],$t01,$t22,$t03-$t02);");

   $t04 = (microtime(true) - $start_time)*1000;
   $tt = $t04-$t03;

   echo '{"0":"'.$d00.'", "1":"'.$tt.'", "2":"'.$rid[0].'", "3":"'.$t22.'"}';
   //-------------------------------------------------------------------------------------------------------------------------------------------
   ...



Если 1-ый вариант отрабатывает: в таблицу базы вносятся тестовые данные, то
2-ой вариант или не даёт подключиться к базе, или ещё какая-то проблема.
В логе такая ошибка:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
   2020/06/07 10:36:29 [error] 1848#1848: *1 FastCGI sent in stderr: 
   "PHP message: PHP Notice:  Undefined offset: 1 in 
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php
   on line 7PHP message: PHP Notice:  Undefined offset: 2 in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 8PHP message:
   PHP Warning:  pg_connect(): Unable to connect to PostgreSQL server:
   could not connect to server: No such file or directory
   Is the server running locally and accepting
   connections on Unix domain socket "/tmp/.s.PGSQL.6432"? in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 66PHP message:
   PHP Warning:  pg_query() expects parameter 1 to be resource, bool given in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 76PHP message:
   PHP Warning:  pg_fetch_row() expects parameter 1 to be resource, null given in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 78PHP message:
   PHP Notice:  Trying to access array offset on value of type null in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 83PHP message:
   PHP Warning:  pg_query() expects parameter 1 to be resource, bool given in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 83PHP message:
   PHP Notice:  Trying to access array offset on value of type null in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 90PHP message:
   PHP Warning:  pg_close() expects parameter 1 to be resource, bool given in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 109" 
   while reading response header from upstream, client: 192.168.31.1,
   server: my-site.com, request: "POST /bouncer/p0_bouncer_01.php HTTP/2.0",
   upstream: "fastcgi://unix:/var/opt/remi/php74/run/php-fpm/www.sock:",
   host: "my-site.com", referrer: "https://my-site.com/"


   2020/06/07 10:36:29 [error] 1848#1848: *1 FastCGI sent in stderr:
   "PHP message: PHP Warning:  pg_connect(): Unable to connect to PostgreSQL server:
   could not connect to server: No such file or directory
   Is the server running locally and accepting
   connections on Unix domain socket "/tmp/.s.PGSQL.6432"? in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 66PHP message:
   PHP Warning:  pg_query() expects parameter 1 to be resource, bool given in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 98PHP message:
   PHP Notice:  Undefined offset: 2 in 
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 98PHP message:
   PHP Warning:  pg_query() expects parameter 1 to be resource, bool given in
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 98PHP message:
   PHP Warning:  pg_close() expects parameter 1 to be resource, bool given in 
   /web/sites/my-site.com/www/bouncer/p0_bouncer_01.php on line 109" 
   while reading response header from upstream, client: 192.168.31.1,
   server: my-site.com, request: "POST /bouncer/p0_bouncer_01.php HTTP/2.0",
   upstream: "fastcgi://unix:/var/opt/remi/php74/run/php-fpm/www.sock:",
   host: "my-site.com", referrer: "https://my-site.com/"



В терминале от пользователя nginx подключаюсь к базе pgbouncer так:
sudo -u nginx psql -h /tmp -p 6432 -U postgres pgbouncer

pgbouncer=# \conninfo
Вы подключены к базе данных "pgbouncer" как пользователь "postgres" через сокет в "/tmp", порт "6432"

pgbouncer=# show config;
привёл в своём вопросе здесь: _sql.ru/forum/1325561/pgbouncer-nastroyka

Также через терминал подключаюсь к базе postgres и могу вставить данные в таблицу:
sudo -u nginx psql -h /tmp -p 6432 -U postgres postgres

postgres=# \conninfo
Вы подключены к базе данных "postgres" как пользователь "postgres" через сокет в "/tmp", порт "6432"

Почему не могу подключиться через сокет скриптом_php (вариант_2)?
...
Рейтинг: 0 / 0
php, подключение к базе через pgbouncer и сокет
    #39966922
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во втором варианте, где указан путь к сокету, номер TCP порта кажется лишним. Или я чего-то не понимаю. Без указания номера порта тоже не подключается?
...
Рейтинг: 0 / 0
php, подключение к базе через pgbouncer и сокет
    #39966925
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
-
это стандартные настройки, если не указать порт 6432, который имеет отношение к pgbouncer,
то будет пытаться подключиться по сокету напрямую к базе postgres по порту 5432, а не транзитом

например, здесь об этом напоминают:
_sql.ru/forum/761008/pgbouncer-ne-rabotaet-cherez-unix-socket?hl=pgbouncer

еще по теме:
_sql.ru/forum/1315759/pgbouncer-c-auth-type-hba-govorit-vsegda-tolko-odno-login-rejected?hl=pgbouncer

т.е. у меня и первый и второй варианты, - это клиент из браузера -> на связку: pgbouncer-postgresql
а траблы только со вторым вариантом (по сокету), причем из кода php, т.к. из консоли по сокету работает

но Ваш вариант, я пробовал перебирал ранее, - не сработает, - будет, как писал выше,
хотя по теме плаваю и где-то точно накосячил
спасибо
...
Рейтинг: 0 / 0
php, подключение к базе через pgbouncer и сокет
    #39966928
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
-
вот, если бы были проблемы с правами или, например,
отсутствовала какая-то библиотека (аля pgsql.so), то
не должен был бы работать вариант_1, наверное ?

а он точно отрабатывает через pgbouncer, т.к. когда
последнему делал stop, то и он переставал работать

не пойму куда копать
...
Рейтинг: 0 / 0
php, подключение к базе через pgbouncer и сокет
    #39966932
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Wong, ну я не крутой спец по постгри. Меня смутили два параметра различного применения в одном месте.

Первый вариант работает на TCP-сокете, там не права, там ограничения по доступу на файрволл возлагаются, если так рассматривать. А вот на UNIX-сокете права следует проверить, это верно.

Однако, сообщение об ошибкеавтор
Код: php
1.
2.
pg_connect(): Unable to connect to PostgreSQL server:
   could not connect to server: No such file or directory

как бы намекает, что в /tmp сокета нет. Тут права как-то... ну, если только у пользователя, от имени которого запущен php, право чтения списка файлов в /tmp отсутствует. Или php работает в каком-то chroot окружении и не видит системную /tmp, хотя, это больше на фантастику похоже. Может, действительно, сокет где-то в другом месте открыт? Что-нить вроде /var/run/pgsql

Alex_Wong
из консоли по сокету работает
Всё же, консольная программа-клиетнт и пхпшное расширение, как оболочка к библиотеке не есть одно и то же. Даже если они используют одну и ту же библиотеку. Логика передачи параметров куда-то во внутренние функции может оказаться разной, а что-то может и вообще не поддерживаться. Такие ограничения часто попадаются.
...
Рейтинг: 0 / 0
php, подключение к базе через pgbouncer и сокет
    #39966986
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
-
авторкак бы намекает, что в /tmp сокета нет
Вы правы, сам в первую очередь это проверил: файл сокета такой есть и pid_файл.
Они формируются каждый раз при старте pgbouncer в /tmp, т.к. этот путь указан
в pgbouncer.ini
Пробовал менять путь ... такая-же ошибка, но уже по новому пути.
Такой вопрос мне задавали:
sql.ru/forum/1325561/pgbouncer-nastroyka]
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php, подключение к базе через pgbouncer и сокет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]