Ошибка при записи во внешний источник с ODBC PostgreSQL на Linux
Всем здравствуйте.
Возникла следующая проблема, уже и не знаю в какую сторону копать.
Суть, при выполнении записи во внешнюю таблицу PostgreSQL, подключенную через odbc, получем ошибку и крашится rphost на сервере, при этом воспроизводится только если сервер 1С на Linux (пробовали Debian 12 и CentOS 7), если сервер на Windows - все хорошо. По ТЖ ничего внятного не нашел.
Версия 1С: 8.3.22.1923 (пробовал 8.3.23.2040)
версия odbc-драйвера: psqlodbc-16.00.0000 во всех случаях (перепробовал разные).
Версия СУБД на удаленном сервере: PostgreSQL 14.6
odbcinst.ini
строка подключения к внешнему источнику в 1С:
Во вложении приложил исходную и внешнюю таблицу, скрин ошибки.
Единственная зацепка, разница при выполнении запросов к БД с Linux и Windows:
краш rphost'а
Возникла следующая проблема, уже и не знаю в какую сторону копать.
Суть, при выполнении записи во внешнюю таблицу PostgreSQL, подключенную через odbc, получем ошибку и крашится rphost на сервере, при этом воспроизводится только если сервер 1С на Linux (пробовали Debian 12 и CentOS 7), если сервер на Windows - все хорошо. По ТЖ ничего внятного не нашел.
Версия 1С: 8.3.22.1923 (пробовал 8.3.23.2040)
версия odbc-драйвера: psqlodbc-16.00.0000 во всех случаях (перепробовал разные).
Версия СУБД на удаленном сервере: PostgreSQL 14.6
odbcinst.ini
[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver = psqlodbcw.so
строка подключения к внешнему источнику в 1С:
Driver={PostgreSQL Unicode};Server=hostname;Port=5432;Database=sis
Во вложении приложил исходную и внешнюю таблицу, скрин ошибки.
Единственная зацепка, разница при выполнении запросов к БД с Linux и Windows:
Лог запросов к удаленной БД с 1С на Linux |
---|
2023-12-28 13:54:10.083 MSK [19543] LOG: statement: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ
2023-12-28 13:54:10.104 MSK [19543] LOG: statement: BEGIN;DELETE FR OM "sis"."public"."barcode" WHERE "sis"."public"."barcode".barcode = '000019142497000001' AND "sis"."public"."barcode".plc = 1 2023-12-28 13:54:10.124 MSK [19543] LOG: statement: SAVEPOINT _EXEC_SVP_0x280c400;DR OP TABLE tt1 2023-12-28 13:54:10.125 MSK [19543] ERROR: table "tt1" does not exist 2023-12-28 13:54:10.125 MSK [19543] STATEMENT: SAVEPOINT _EXEC_SVP_0x280c400;DR OP TABLE tt1 2023-12-28 13:54:10.129 MSK [19543] LOG: statement: ROLLBACK TO _EXEC_SVP_0x280c400 2023-12-28 13:54:10.179 MSK [21117] LOG: statement: SET DateStyle = 'ISO';SET extra_float_digits = 2;show transaction_isolation 2023-12-28 13:54:10.185 MSK [21117] LOG: statement: sel ect oid, typbasetype fr om pg_type where typname = 'lo' 2023-12-28 13:54:10.190 MSK [21117] LOG: statement: SEL ECT N'A' 2023-12-28 13:54:10.200 MSK [21117] LOG: statement: DR OP TABLE tt1 2023-12-28 13:54:10.200 MSK [21117] ERROR: table "tt1" does not exist 2023-12-28 13:54:10.200 MSK [21117] STATEMENT: DR OP TABLE tt1 2023-12-28 13:54:21.840 MSK [21117] LOG: statement: SEL ECT T1.barcode, T1.plc, T1.chute, T1."create_date", T1."alive_date" FR OM "sis"."public"."barcode" T1 WH ERE T1.barcode = '000019142497000001' AND T1.plc = 1 ORDER BY T1.barcode, T1.plc 2023-12-28 13:54:21.847 MSK [21117] LOG: statement: sel ect n.nspname, c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull, c.relhasrules, c.relkind, c.oid, pg_get_expr(d.adbin, d.adrelid), case t.typtype when 'd' then t.typbasetype else 0 end, t.typtypmod, 0, attidentity, c.relhassubclass fr om (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.oid = 24579) inner join pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid = a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum 2023-12-28 13:54:21.877 MSK [21117] LOG: statement: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ 2023-12-28 13:54:21.898 MSK [21117] LOG: statement: BEGIN;DELETE FR OM "sis"."public"."barcode" WH ERE "sis"."public"."barcode".barcode = '000019142497000001' AND "sis"."public"."barcode".plc = 1 2023-12-28 13:54:21.916 MSK [21117] LOG: statement: SAVEPOINT _EXEC_SVP_0x280c400;DR OP TABLE tt1 2023-12-28 13:54:21.916 MSK [21117] ERROR: table "tt1" does not exist 2023-12-28 13:54:21.916 MSK [21117] STATEMENT: SAVEPOINT _EXEC_SVP_0x280c400;DR OP TABLE tt1 2023-12-28 13:54:21.920 MSK [21117] LOG: statement: ROLLBACK TO _EXEC_SVP_0x280c400 /* вот тут падает rphost */ 2023-12-28 13:54:21.969 MSK [21329] LOG: statement: SET DateStyle = 'ISO';SET extra_float_digits = 2;show transaction_isolation 2023-12-28 13:54:21.974 MSK [21329] LOG: statement: sel ect oid, typbasetype fr om pg_type wh ere typname = 'lo' 2023-12-28 13:54:21.979 MSK [21329] LOG: statement: SEL ECT N'A' 2023-12-28 13:54:21.989 MSK [21329] LOG: statement: DR OP TABLE tt1 2023-12-28 13:54:21.989 MSK [21329] ERROR: table "tt1" does not exist 2023-12-28 13:54:21.989 MSK [21329] STATEMENT: DR OP TABLE tt1 |
Лог запросов к удаленной БД с 1С на Windows |
---|
2023-12-26 12:54:22.866 MSK [25411] LOG: statement: SET DateStyle = 'ISO';SET extra_float_digits = 2;show transaction_isolation
2023-12-26 12:54:22.954 MSK [25411] LOG: statement: sel ect oid, typbasetype fr om pg_type where typname = 'lo' 2023-12-26 12:54:23.055 MSK [25411] LOG: statement: SEL ECT T1.barcode, T1.plc, T1.chute, T1."create_date", T1."alive_date" FR OM "sis"."public"."barcode" T1 WHERE 1=1 ORDER BY (T1.barcode), (T1.plc) LIM IT 45 2023-12-26 12:54:23.131 MSK [25411] LOG: statement: select n.nspname, c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull, c.relhasrules, c.relkind, c.oid, pg_get_expr(d.adbin, d.adrelid), case t.typtype when 'd' then t.typbasetype else 0 end, t.typtypmod, 0, attidentity, c.relhassubclass fr om (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.oid = 24579) inner join pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid = a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum 2023-12-26 12:54:24.404 MSK [25411] LOG: statement: SELECT T1.barcode, T1.plc, T1.chute, T1."create_date", T1."alive_date" FR OM "sis"."public"."barcode" T1 WH ERE T1.barcode = '000019142794900001' AND T1.plc = 1 ORDER BY T1.barcode, T1.plc 2023-12-26 12:54:25.472 MSK [25411] LOG: statement: SELECT T1.barcode, T1.plc, T1.chute, T1."create_date", T1."alive_date" FR OM "sis"."public"."barcode" T1 WH ERE T1.barcode = '000019142794900001' AND T1.plc = 1 ORDER BY T1.barcode, T1.plc 2023-12-26 12:54:25.554 MSK [25411] LOG: statement: BEGIN;DELETE FR OM "sis"."public"."barcode" WH ERE "sis"."public"."barcode".barcode = '000019142794900001' AND "sis"."public"."barcode".plc = 1 2023-12-26 12:54:25.628 MSK [25411] LOG: statement: SAVEPOINT _EXEC_SVP_000001A91632B700;DR OP TABLE tt1 2023-12-26 12:54:25.628 MSK [25411] ERROR: table "tt1" does not exist 2023-12-26 12:54:25.628 MSK [25411] STATEMENT: SAVEPOINT _EXEC_SVP_000001A91632B700;DR OP TABLE tt1 2023-12-26 12:54:25.693 MSK [25411] LOG: statement: ROLLBACK TO _EXEC_SVP_000001A91632B700 /*проскочили проблемный момент*/ 2023-12-26 12:54:25.762 MSK [25411] LOG: statement: RELEASE _EXEC_SVP_000001A91632B700;SAVEPOINT _EXEC_SVP_000001A91632B700;CREATE TEMPORARY TABLE tt1 ("_barcode" varchar(128),"_plc" numeric(8,0),"_chute" numeric(8,0),"_create_date" timestamp,"_alive_date" timestamp) WITHOUT OIDS 2023-12-26 12:54:25.836 MSK [25411] LOG: statement: RELEASE _EXEC_SVP_000001A91632B700;SAVEPOINT _EXEC_SVP_000001A91632B700;INS ERT INTO tt1 ("_barcode","_plc","_chute","_create_date","_alive_date") VALUES('000019142794900001',1,2,'2023-12-21 13:50:29','2023-12-22 13:50:29') 2023-12-26 12:54:25.911 MSK [25411] LOG: statement: RELEASE _EXEC_SVP_000001A91632B700;SAVEPOINT _EXEC_SVP_000001A91632B700;SELECT T1."_barcode", T1."_plc", T1."_chute", T1."_create_date", T1."_alive_date" FR OM tt1 T1 INNER JOIN "sis"."public"."barcode" T2 ON T1."_barcode" = T2.barcode AND T1."_plc" = T2.plc 2023-12-26 12:54:25.994 MSK [25411] LOG: statement: select n.nspname, c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull, c.relhasrules, c.relkind, c.oid, pg_get_expr(d.adbin, d.adrelid), case t.typtype when 'd' then t.typbasetype else 0 end, t.typtypmod, 0, attidentity, c.relhassubclass fr om (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.oid = 32850) inner join pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid = a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum 2023-12-26 12:54:26.085 MSK [25411] LOG: statement: RELEASE _EXEC_SVP_000001A91632B700;SAVEPOINT _EXEC_SVP_000001A91632B700;INS ERT IN TO "sis"."public"."barcode" (barcode, plc, chute, "create_date", "alive_date") SELE CT CAST(T1."_barcode" AS VARCHAR(128)), T1."_plc", T1."_chute", T1."_create_date", T1."_alive_date" FR OM tt1 T1 2023-12-26 12:54:26.171 MSK [25411] LOG: statement: COMMIT |
краш rphost'а
syslog |
---|
дек 28 11:15:01 nvd-ulk-tst01 kernel: traps: rphost[12270] general protection fault ip:7fe936cf9a72 sp:7fe9449fb170 error:0 in edb.so[7fe936800000+6aa000]
дек 28 11:15:11 nvd-ulk-tst01 kernel: rphost[12321]: segfault at 7f6da33125 ip 00007f6d982f9a72 sp 00007f6dadffb170 error 4 in edb.so[7f6d97e00000+6aa000] likely on CPU 3 (core 3, socket 0) дек 28 11:15:11 nvd-ulk-tst01 kernel: Code: 05 aa 08 00 31 c0 48 01 ef e8 6a a7 c4 ff 48 8b 44 24 08 48 8b b8 90 00 00 00 48 85 ff 48 89 bc 24 50 01 00 00 74 06 48 8b 07 <ff> 50 08 48 8d 9c 24 50 01 00 00 74 06 48 8b 07 <ff> 50 08 48 8d 9c 24 50 01 00 00 4c 8d bc 24 a0 01 00 00 31 d2 48 |
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Как быть тестировщиком?
1) создаем табличку с одним полем и кидаем туда данные, и читаем.
2) пробуем другой тип данных писать и читать
3) всё больше приближаемся по структуре в вашим данным (тестовая табличка)
4) это или 1с или драйвер
5) может Null передаёте или с кавычками данные
6) права на данные в базе, права в linux (это уже почти бред...)
Вот вы и стали тестировщиком)
1) создаем табличку с одним полем и кидаем туда данные, и читаем.
2) пробуем другой тип данных писать и читать
3) всё больше приближаемся по структуре в вашим данным (тестовая табличка)
4) это или 1с или драйвер
5) может Null передаёте или с кавычками данные
6) права на данные в базе, права в linux (это уже почти бред...)
Вот вы и стали тестировщиком)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот