Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

На версии PostgreSQL 15 при вызове метода http urlencoded form post дает ошибку (ОС Debian 11) #12

Closed
ivras77 opened this issue Sep 19, 2023 · 22 comments

Comments

@ivras77
Copy link

ivras77 commented Sep 19, 2023

Добрый вечер!
процесс сервера (PID 118906) был завершён по сигналу 11: Ошибка сегментирования
после чего СУБД перезапускается
При этом версия 1.0 прекрасно работает.

@ivras77 ivras77 changed the title На версии PostgreSQL 15 при вызове метода http urlencoded form post дает ошибку На версии PostgreSQL 15 при вызове метода http urlencoded form post дает ошибку (ОС Debian 11) Sep 19, 2023
@RekGRpth
Copy link
Owner

какой запрос привёл к ошибке?

@RekGRpth
Copy link
Owner

postgres=> create extension pg_curl;
CREATE EXTENSION
postgres=> CREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$
    WITH s AS (SELECT
        curl_easy_reset(),
        ( WITH s AS (
            SELECT (json_each_text(request)).*
        ) SELECT array_agg(curl_postfield_append(key, value)) FROM s),
        curl_easy_setopt_url(url),
        curl_easy_perform(),
        curl_easy_getinfo_data_in()
    ) SELECT convert_from(curl_easy_getinfo_data_in, 'utf-8') FROM s;
$BODY$;
CREATE FUNCTION
postgres=> select post('https://httpbin.org/post?a=b&c=&d', '{"e": "f", "g": "", "h": null}');
                               post                                
-------------------------------------------------------------------
 {                                                                +
   "args": {                                                      +
     "a": "b",                                                    +
     "c": "",                                                     +
     "d": ""                                                      +
   },                                                             +
   "data": "",                                                    +
   "files": {},                                                   +
   "form": {                                                      +
     "e": "f",                                                    +
     "g": "",                                                     +
     "h": ""                                                      +
   },                                                             +
   "headers": {                                                   +
     "Accept": "*/*",                                             +
     "Content-Length": "8",                                       +
     "Content-Type": "application/x-www-form-urlencoded",         +
     "Host": "httpbin.org",                                       +
   },                                                             +
   "json": null,                                                  +
   "url": "https://httpbin.org/post?a=b&c=&d"                     +
 }                                                                +
 
(1 row)

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

Да все так. Только у валится даже на таком простом вызове.
select post('http://192.168.8.113/api/pdf.php','{"mail":["[email protected]"],
"subject":"Тема письма",
"body":"Текст письма пихай сюда"
}')
При этом первый раз отрабатывает нормально. А если вызвать второй раз база уходит в ребут. Но если например переконнетиться, то есть запрос будет выполняться в новой сессии, то опять, первый раз отработает. Второй раз даже если подождать несколько минут база в ребут.

@RekGRpth
Copy link
Owner

RekGRpth commented Sep 20, 2023

проверил последнюю версию расширения на 15 и 16, падений нет

select post('https://httpbin.org/post?a=b&c=&d', '{"mail":["[email protected]"],
"subject":"Тема письма",
"body":"Текст письма пихай сюда"
}');
                                                                    post                                                                     
---------------------------------------------------------------------------------------------------------------------------------------------
 {                                                                                                                                          +
   "args": {                                                                                                                                +
     "a": "b",                                                                                                                              +
     "c": "",                                                                                                                               +
     "d": ""                                                                                                                                +
   },                                                                                                                                       +
   "data": "",                                                                                                                              +
   "files": {},                                                                                                                             +
   "form": {                                                                                                                                +
     "body": "\u0422\u0435\u043a\u0441\u0442 \u043f\u0438\u0441\u044c\u043c\u0430 \u043f\u0438\u0445\u0430\u0439 \u0441\u044e\u0434\u0430", +
     "mail": "[\"ivras@inbox.ru\"]",                                                                                                        +
     "subject": "\u0422\u0435\u043c\u0430 \u043f\u0438\u0441\u044c\u043c\u0430"                                                             +
   },                                                                                                                                       +
   "headers": {                                                                                                                             +
     "Accept": "*/*",                                                                                                                       +
     "Content-Length": "240",                                                                                                               +
     "Content-Type": "application/x-www-form-urlencoded",                                                                                   +
     "Host": "httpbin.org",                                                                                                                 +
   },                                                                                                                                       +
   "json": null,                                                                                                                            +
   "url": "https://httpbin.org/post?a=b&c=&d"                                                                                               +
 }                                                                                                                                          +
 
(1 row)

@RekGRpth
Copy link
Owner

как было установлено расширение?

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

sudo su -l postgres -c 'git clone https://github.com/RekGRpth/pg_curl.git'
потом под postgres make, sudo make install
повторюсь, что у меня на на других машинах осталась версия 1.0. Я ее также копирую и ставлю один в один. Она работает без ошибок. Могу попробовать выставить postgres логи в debug и посмотреть, может напишет функцию на которой падает.

@RekGRpth
Copy link
Owner

Могу попробовать выставить postgres логи в debug и посмотреть, может напишет функцию на которой падает.

тут только поможет посмотреть coredump

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

попробую в течении дня

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

включил debug1 в postgre получаю следующую ошибку, может что-то скажет Вам
ОТЛАДКА: mmap(576716800) with MAP_HUGETLB failed, huge pages disabled: Невозможно выделить память
поигрался с настройками субд и ос, ошибка ушла, но сервер все равно перезапускается

@RekGRpth
Copy link
Owner

ОТЛАДКА: mmap(576716800) with MAP_HUGETLB failed, huge pages disabled: Невозможно выделить память

это точно не то, у меня также ругается

@RekGRpth
Copy link
Owner

вот, при таких настройках в /etc/security/limits.conf

* hard core 1048576
* hard nofile 1048576
* hard nproc 1048576
* soft core 1048576
* soft nofile 1048576
* soft nproc 1048576
root hard core 1048576
root hard nofile 1048576
root hard nproc 1048576
root soft core 1048576
root soft nofile 1048576
root soft nproc 1048576

у меня на убунте генерируется coredump при сегфолтах

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

[New LWP 2250]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `postgres: 15/main: postgres novatprod 192.168.10.26(54907) SELECT '.
Program terminated with signal SIGSEGV, Segmentation fault.

это о чем то говорит? Дамп я получил.

@RekGRpth
Copy link
Owner

Дамп я получил

тогда его можно открыть

gdb postgres coredump

и посмотреть стек, введя

bt

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

(gdb) bt
#0 0x00005597f8a6c397 in pfree ()
#1 0x00007f63f7d125e6 in pg_curl_free_callback (ptr=0x5597f9a13858) at pg_curl.c:110
#2 0x00007f63f7cb75c6 in curl_slist_free_all () from /lib/x86_64-linux-gnu/libcurl.so.4
#3 0x00007f63f7d13844 in pg_curl_easy_header_reset (fcinfo=fcinfo@entry=0x5597f99e8698) at pg_curl.c:287
#4 0x00007f63f7d13a8e in pg_curl_easy_reset (fcinfo=0x5597f99e8698) at pg_curl.c:345
#5 0x00005597f879abca in ?? ()
#6 0x00005597f87cda80 in ?? ()
#7 0x00005597f87b727d in ?? ()
#8 0x00005597f87a7e60 in ExecScan ()
#9 0x00005597f879ec9d in standard_ExecutorRun ()
#10 0x00005597f87adba5 in fmgr_sql ()
#11 0x00005597f8a49565 in fmgr_security_definer ()
#12 0x00005597f879abca in ?? ()
#13 0x00005597f87cda80 in ?? ()
#14 0x00005597f879ec9d in standard_ExecutorRun ()
#15 0x00005597f8915bae in ?? ()
#16 0x00005597f891705e in PortalRun ()
#17 0x00005597f891466f in PostgresMain ()
#18 0x00005597f8892541 in ?? ()
#19 0x00005597f8893511 in PostmasterMain ()
#20 0x00005597f85fe3d1 in main ()

@RekGRpth
Copy link
Owner

а сам postgres как устанваливался? это не отладочная сборка?

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

Нет, я ставлю его из пакетов с официального сайта.
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt -y install postgresql-15
sudo apt -y install postgresql-server-dev-15

единственное НО, я делаю upgrade c 13 версии на 15
для чистоты эксперимента могу поставить чистый 15 и попробовать на нем.

@RekGRpth
Copy link
Owner

upgrade c 13 версии на 15

это не должно влиять

я вроде нашёл и поправил ошибку

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

взять новую версию с репозитария и попробовать?

@RekGRpth
Copy link
Owner

да, если не трудно

@ivras77
Copy link
Author

ivras77 commented Sep 20, 2023

Да все работает без ошибок, супер! Спасибо большое!

@RekGRpth
Copy link
Owner

Это вам большое спасибо, что помогли найти ошибку!

@RekGRpth
Copy link
Owner

исправлено коммитом 5ed0c01

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants