I have a table with a JSONB field containing nested arrays.
I would like to explode the data in those nested JSON arrays to multiple rows while keeping the information about the place of each value in the arrays structure.
I have some queries which work until a certain level of nesting but i came to a point where Postgres fails with a [XX000] ERROR: failed to build any 3-way joins that I don’t understand.
Is anybody able to indicate what I am doing wrong and/or what is this error meaning?
For convenience below is everything to reproduce the problem:
A very simple table:
CREATE TABLE random_table (
random_field JSONB
);
A very nested JSONB data:
INSERT INTO public.random_table (random_field) VALUES ('{"bar": [[[1, 2, 3, 4]]], "foo": [[["abc", "def"], ["tuw", "xyz"]]]}');
A quite complex query:
SELECT *
FROM random_table
LEFT OUTER JOIN LATERAL (
SELECT *
FROM jsonb_array_elements(random_table.random_field -> 'foo')
WITH ORDINALITY AS foo_level_1(foo_1, foo_1_index)
LEFT OUTER JOIN LATERAL (
SELECT *
FROM jsonb_array_elements(foo_1)
WITH ORDINALITY AS foo_level_2(foo_2, foo_2_index)
-- LEFT OUTER JOIN LATERAL (
-- SELECT *
-- FROM jsonb_array_elements(foo_2)
-- WITH ORDINALITY AS foo_level_3(foo_3, foo_3_index)
-- ) AS foo_lateral_2 ON TRUE
) AS foo_lateral_1 ON TRUE
-- FULL OUTER JOIN jsonb_array_elements(random_table.random_field -> 'bar')
-- WITH ORDINALITY AS bar_level_1(bar_1, bar_1_index) ON FALSE
-- LEFT OUTER JOIN LATERAL (
-- SELECT *
-- FROM jsonb_array_elements(bar_1)
-- WITH ORDINALITY AS bar_level_2(bar_2, bar_2_index)
-- ) AS bar_lateral_1 ON TRUE
) AS pouet ON TRUE;
Note the two commented parts:
- If the first one OR the second one is uncommented, the query seems to be working as expected (not finished but encouraging)
- If both are uncommented, The
[XX000] ERROR: failed to build any 3-way joinsoccurs
see the fiddle.
Obviously I would like to be able to uncomment the two commented parts and even complexify the FROM clause.
Any help will be greatly appreciated.
У меня есть таблица с полем JSONB, содержащим вложенные массивы. Я хотел бы разбить данные в этих вложенных массивах JSON на несколько строк, сохраняя информацию о месте каждого значения в структуре массивов.
У меня есть несколько запросов, которые работают до определенного уровня вложенности, но я дошел до того, что Postgres завершается с ошибкой [XX000] ERROR: failed to build any 3-way joins которые я не понимаю.
Кто-нибудь может указать, что я делаю неправильно и/или что означает эта ошибка?
Для удобства ниже есть все, чтобы воспроизвести проблему:
Очень простая таблица:
CREATE TABLE random_table (
random_field JSONB
);
Очень вложенные данные JSONB:
INSERT INTO public.random_table (random_field) VALUES ('{"bar": [[[1, 2, 3, 4]]], "foo": [[["abc", "def"], ["tuw", "xyz"]]]}');
Довольно сложный запрос:
SELECT *
FROM random_table
LEFT OUTER JOIN LATERAL (
SELECT *
FROM jsonb_array_elements(random_table.random_field -> 'foo')
WITH ORDINALITY AS foo_level_1(foo_1, foo_1_index)
LEFT OUTER JOIN LATERAL (
SELECT *
FROM jsonb_array_elements(foo_1)
WITH ORDINALITY AS foo_level_2(foo_2, foo_2_index)
-- LEFT OUTER JOIN LATERAL (
-- SELECT *
-- FROM jsonb_array_elements(foo_2)
-- WITH ORDINALITY AS foo_level_3(foo_3, foo_3_index)
-- ) AS foo_lateral_2 ON TRUE
) AS foo_lateral_1 ON TRUE
-- FULL OUTER JOIN jsonb_array_elements(random_table.random_field -> 'bar')
-- WITH ORDINALITY AS bar_level_1(bar_1, bar_1_index) ON FALSE
-- LEFT OUTER JOIN LATERAL (
-- SELECT *
-- FROM jsonb_array_elements(bar_1)
-- WITH ORDINALITY AS bar_level_2(bar_2, bar_2_index)
-- ) AS bar_lateral_1 ON TRUE
) AS pouet ON TRUE;
Обратите внимание на две прокомментированные части:
- Если первый ИЛИ второй не комментируется, кажется, что запрос работает должным образом (не завершен, но обнадеживающий) Если оба не прокомментированы,
[XX000] ERROR: failed to build any 3-way joins увидеть скрипку
Очевидно, я хотел бы иметь возможность раскомментировать две прокомментированные части и даже усложнить предложение FROM.
Любая помощь будет оценена.
Войти или зарегистрироваться
8.х Проблема с Postgres 8.2.6
Тема в разделе «Установка платформы «1С:Предприятие 8″», создана пользователем nix0n, 28 мар 2008.
-
0/5,
Голосов: 0
-
Offline
nix0n
- Регистрация:
- 17 янв 2008
- Сообщения:
- 4
- Симпатии:
- 0
- Баллы:
- 1
Доборый день!
На сервере был установлен Постгрес 8.1.5 из поставки 1С. Проблем не наблюдалось. После перехода на версию 8.2.6 (скачана с сайта 1С) при проведении платежных поручения возникает ошибка «failed to build any 8-way join». Это у всех так?
nix0n,
28 мар 2008
#1 -
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Есть такая ошибка тут ее описание.
BabySG,
28 мар 2008
#2 -
Offline
nix0n
- Регистрация:
- 17 янв 2008
- Сообщения:
- 4
- Симпатии:
- 0
- Баллы:
- 1
Спасиб.
Самое интересное, что валится на 1С демо-базе. Похоже господа не утруждают себя отладкой.
nix0n,
28 мар 2008
#3
- Похожие темы
-

8.х
Postgres (Windows) проблема создания базы
decoder,
5 июл 2007, в разделе: Установка платформы «1С:Предприятие 8»
- Ответов:
- 4
- Просмотров:
- 5.468
- LkMaksimka
- 11 сен 2008
-

8.х
1С 8.1 перенос базы с Postgres 8.2 на 8.3
Decard,
7 апр 2009, в разделе: Установка платформы «1С:Предприятие 8»
- Ответов:
- 0
- Просмотров:
- 3.487
- Decard
- 7 апр 2009
-

8.х
Установка Postgres на ubuntu 11.10
Tronen,
29 дек 2011, в разделе: Установка платформы «1С:Предприятие 8»
- Ответов:
- 1
- Просмотров:
- 1.235
- aureliano
- 13 янв 2012
-

8.х
Ошибка в БД на postgres
Tronen,
20 фев 2012, в разделе: Установка платформы «1С:Предприятие 8»
- Ответов:
- 13
- Просмотров:
- 3.198
- TODD22
- 31 мар 2012
-

8.х
Как удаленно узнать postgres x86 или x64?
MyNameNoName,
19 дек 2013, в разделе: Установка платформы «1С:Предприятие 8»
- Ответов:
- 1
- Просмотров:
- 862
- safarov
- 1 янв 2014
- Ваше имя или e-mail:
- У Вас уже есть учётная запись?
-
- Нет, зарегистрироваться сейчас.
- Да, мой пароль:
-
Забыли пароль?
-
Запомнить меня
-
- Искать только в заголовках
- Сообщения пользователя:
-
Имена участников (разделяйте запятой).
- Новее чем:
-
- Искать только в этой теме
- Искать только в этом разделе
- Отображать результаты в виде тем
-
Быстрый поиск
- Последние сообщения
Больше…
Re: BUG #2862: ERROR: failed to build any 7-way joins
| From: | Tom Lane |
|---|---|
| To: | «Sergey» |
| Cc: | pgsql-bugs(at)postgresql(dot)org |
| Subject: | Re: BUG #2862: ERROR: failed to build any 7-way joins |
| Date: | 2006-12-25 20:39:15 |
| Message-ID: | 25705.1167079155@sss.pgh.pa.us |
| Views: | Raw Message | Whole Thread | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
«Sergey» writes:
> After migrating to 8.2 I received an error:
> ERROR: failed to build any 7-way joins
I think this is already reported and fixed, but your test case looks a
bit different from the previous examples — don’t suppose you’re in
a position to try it against CVS tip before we release 8.2.1?
regards, tom lane
In response to
- BUG #2862: ERROR: failed to build any 7-way joins at 2006-12-23 12:46:17 from Sergey
Browse pgsql-bugs by date
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2006-12-25 20:41:33 | Re: SIMILAR TO incorrect with alternation |
| Previous Message | Harpreet Dhaliwal | 2006-12-25 17:32:17 | Re: [GENERAL] NEED URGENT HELP. |
Copyright © 1996-2023 The PostgreSQL Global Development Group
Источник
BUG #2862: ERROR: failed to build any 7-way joins
| From: | «Sergey» |
|---|---|
| To: | pgsql-bugs(at)postgresql(dot)org |
| Subject: | BUG #2862: ERROR: failed to build any 7-way joins |
| Date: | 2006-12-23 12:46:17 |
| Message-ID: | 200612231246.kBNCkH9J067639@wwwmaster.postgresql.org |
| Views: | Raw Message | Whole Thread | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
The following bug has been logged online:
Bug reference: 2862
Logged by: Sergey
Email address: for(dot)adv(at)gmail(dot)com
PostgreSQL version: 8.2.0-1
Operating system: Windows XP Pro SP2
Description: ERROR: failed to build any 7-way joins
Details:
After migrating to 8.2 I received an error:
ERROR: failed to build any 7-way joins
SQL state: XX000
STATEMENT: select * from v_well_main w LEFT OUTER JOIN v_state_main s ON
(w.»Id_well»=s.»Id_wl») LEFT OUTER JOIN v_expl_main e ON
(w.»Id_well»=e.»Id_wl») where w.»Id_dep»=7
View v_well_main contained statement:
SELECT w.»Id_well», w.»Name_wl», w.»Num», w.»Cod», c.»Name» AS
«Categor_name», w.»Inv_num», w.»Balance», w.»Obl», w.»Reg», w.»Sl_rada»,
w.»Latitude_deg», w.»Latitude_min», w.»Latitude_sec», w.»Longitude_deg»,
w.»Longitude_min», w.»Longitude_sec», w.»Topograf_note», w.»Passp_org»,
w.»Passp_date», w.»Executor», w.»Exec_phone», w.»Director», w.»Al_rotor»,
w.»Al_gr», w.»dP», o.»Id_org», o.»Name», o.»Address», o.»EDRPOU», o.»Phone»,
b.»Name» AS name_obl, b.»KOATUU» AS obl_koatuu, r.»Name» AS name_raj,
r.»KOATUU» AS raj_koatuu, s.»Name» AS sl, v.»Id_dep», v.»Name_dep», v.»Typ»,
v.obj_typ, v.»Begin», v.»End»
FROM v_well_obj v, «Categor_dic» c, «Well» w
LEFT JOIN «Obl_dic» b ON w.»Obl» = b.»Id_obl»
LEFT JOIN «Raj_dic» r ON w.»Reg» = r.»Id_raj»
LEFT JOIN «Sl_rad_dic» s ON w.»Sl_rada» = s.»Id_s»
LEFT JOIN «Org_dic» o ON w.»Passp_org» = o.»Id_org»
WHERE v.»Id_well» = w.»Id_well» AND c.»Id_cat» = w.»Categor»
ORDER BY w.»Num»;
The query was executed in pgAdmin III
If STATEMENT change to:
select * from v_well_main w where w.»Id_dep»=113
then it executed OK
Источник
Re: ERROR: failed to build any 4-way joins SQL state: XX000, PostgreSQL 8.2 beta1
| From: | Tom Lane |
|---|---|
| To: | «JEAN-PIERRE PELLETIER» |
Cc: pgsql-bugs(at)postgresql(dot)org Subject: Re: ERROR: failed to build any 4-way joins SQL state: XX000, PostgreSQL 8.2 beta1 Date: 2006-10-24 17:51:31 Message-ID: 21640.1161712291@sss.pgh.pa.us Views: Raw Message | Whole Thread | Download mbox | Resend email Thread: Lists: pgsql-bugs
writes:
> I have a query that throws «ERROR: failed to build any 4-way joins
Fixed — thanks for the report! (This didn’t make beta2, but will
be in the next one.)
regards, tom lane
In response to
- ERROR: failed to build any 4-way joins SQL state: XX000, PostgreSQL 8.2 beta1 at 2006-10-24 15:27:14 from JEAN-PIERRE PELLETIER
Responses
- Re: ERROR: failed to build any 4-way joins SQL state: XX000, PostgreSQL at 2006-11-08 15:00:57 from JEAN-PIERRE PELLETIER
Browse pgsql-bugs by date
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Andrus Moor | 2006-10-24 18:10:38 | BUG #2718: Failed to run initdb, log file does not exist |
| Previous Message | Pavel | 2006-10-24 15:43:37 | BUG #2717: performance problem with enable_bitmapscan |
Copyright © 1996-2023 The PostgreSQL Global Development Group
Источник
v.8 SQL Server — Ошибка СУБД

При получении любым способом доступа к документу (документ примерно вычислил) программа вылетает и выдает
Ошибка СУБД :
Microsoft OLE DB Provider for SQL Server :
Page (1:1083352), slot 82 for text, ntext, or image node does not exist
HRESULT=80004005,SQLSTATE=HY000,native=7105
Error: 7105, Severity: 22, State: 6
Не можем сделать ни перепроведение, ни восстановление последовательности, ни перенос данных, работа по сути парализована.
SQL server знаю плохо, размер базы 11Гб
Пробовал запускать Integrity Checks Job for DB Maintenance Plan — проходит несколько суток и не понятно работает она или нет ибо ничего не происходит.
Я даже готов вручную удалить эти документы из таблиц, только не знаю как к ним подобраться. Подскажите кто сталкивался с такой проблемой, как ее максимально быстро решить, время уже поджимает, бухгалтерия не может никак март закрыть изза этого.








RESOLUTION
Hotfix information
A supported hotfix is now available from Microsoft, but it is only intended to correct the problem that is described in this article. Only apply it to systems that are experiencing this specific problem. This hotfix may receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next SQL Server 2000 service pack that contains this hotfix.
To resolve this problem immediately, contact Microsoft Product Support Services to obtain the hotfix. For a complete list of Microsoft Product Support Services telephone numbers and information about support costs, visit the following Microsoft Web site:
http://support.microsoft.com/contactus/?ws=support
Note In special cases, charges that are ordinarily incurred for support calls may be canceled if a Microsoft Support Professional determines that a specific update will resolve your problem. The usual support costs will apply to additional support questions and issues that do not qualify for the specific update in question.
Prerequisites
This hotfix requires SQL Server 2000 Service Pack 3 (SP3). For information about how to obtain SQL Server 2000 SP3, see the following article in the Microsoft Knowledge Base:
290211 How to obtain the latest SQL Server 2000 Service Pack
Additionally, this hotfix requires that you have SQL Server 2000 post-Service Pack 3hotfix build 2000.80.977 installed. For more information about SQL Server 2000 post-Service Pack 3 hotfix build 2000.80.977, click the following article number to view the article in the Microsoft Knowledge Base:
888007 You receive a «The product does not have a prerequisite update installed» error message when you try to install a SQL Server 2000 post-Service Pack 3 hotfix
Источник
Ошибки СУБД. 1С+PostgreSQL+Linux. Часть 2.

Ошибка СУБД:
Продолжение сообщения может быть различным:
DATABASE не пригоден для использования
Пример полного текста ошибки:

Описание ошибки:
База не запускается после установки и создания.
Решения:
Установим версию предназначенную для работы с 1С:Предприятием. Скачать такую можно с сайта 1С (при наличии купленного ИТС и открытого доступа), или приобрести у PostgresPro.
Либо проверим все ли зависимости были установлены. И установим недостающие.
ERROR: type «tt7» already exists
Пример полного текста ошибки:

Описание:
Данная ошибка является «плавающей» и может возникать в различных местах
Решение:
Выгрузим и загрузим базу данных средствами 1С:Предприятия(через файл *.dt).
ERROR: could not read block

Описание ошибки:
База не запускается. Разрушились диски.
Решения:
Переносим базу на другую дисковую систему.
Разворачиваем из резервной копии.
Не удалось запустить сервер PostgreSQL
Пример полного текста ошибки:

Описание:
Такая ситуация часто случается у начинающих администраторов в случае, если они хотят инициализировать сервер в каталог отличный от каталога по умолчанию. При этом сервер уже запустили из каталога по умолчанию.
В этой ситуации при попытке запуска видно ошибку – сервер не запускается.
А при проверке состояния видно, что сервер работает.

Если проверим запущенные процессы пользователя postgres, то можно увидеть, что порт 5432 занят кластером PostgreSQL, только запущенным из каталога по умолчанию.

Решение:
Остановим работающий кластер сервера СУБД.
Инициализируем кластер из нового каталога(если он не инициализирован).
Запустим из нового каталога.
Длительный запуск 1С:Предприятия при работе с СУБД PostgreSQL
Описание:
Длительный запуск, длительный захват объектов в хранилище, длительное сохранение конфигурации 1С:Предприятия.
Решение:
Такая проблема может быть связано с настройками СУБД PostgreSQL.
Рассчитаем настройки СУБД.
Описание настроек приведено на ИТС.
Выполним настройки, для этого перейдем в терминал psql:
Через psql установим параметры командой ALTER SYSTEM SET(параметры необходимо указать для вашей СУБД):
Из файла *xlsx загружаются в 1С иероглифы/ в файл выгружаются иероглифы.
Описание ошибки:
При загрузке данных из файла *.xlsx в 1С отображаются иероглифы. Используемая СУБД PostgreSQL/PostgresPro.

Также возможна проблема с кодировкой в выгружаемом файле из 1С:

Решение:
На сервере СУБД проверим и выполним настройку локали.
1. Проверим наличие локали:
2. Проверим переменную:
Корректное значение результатов выполнения команд 2, 3:
3. Если результат не соответствует, выполним:
5. Выполним перезапуск серверов СУБД
Еще можно посмотреть

Отладка на сервере 1С на Linux
Настройка отладки на Linux сервере 1С. Пошаговый процесс настройки tcp и http отладки.

Установка двух версий сервера 1С на Linux
Пошаговый процесс установки и запуска двух версий сервера 1С на Linux. Полное описание настройки второго экземпляра сервера 1С.

Утилита ring license для 1С версии 8.3.14 и выше под Linux
Для чего нужен 1C ring license? На текущий момент широко распространено использование программных лицензий. И системы на базе 1С в этом не исключение. Но, помимо простой активации пин-кодов, программная лицензия 1С также нуждается в обслуживании. Для обслуживания разработчику требуются знания об инструменте для получения списков, информации, анализа состояния файлов программных лицензий. Об этом инструменте мы […]

Очистка кэша: серверного и клиентского для 1С:Предприятия
Лечим непонятные ошибки 1С Предприятия чисткой так называемого кеша — служебных файлов с настройками 1С
НАСТРОЙКА PG_PROFILER ДЛЯ POSTGRESQL 11.
Помимо анализа планов и запросов СУБД в технологическом журнале 1С, также бывает полезным анализировать статистику по запросам в pg_profiler. Тем более, что она уже собирается в сгруппированном по запросам виде. Ниже приведем инструкцию по его настройке. 1. Инсталляция и настройка pg_profile. 2. Настройка отображения pg_profiler через веб-сервер apache. Инсталляция и настройка pg_profile. 1. Скачаем pg_profile […]
ОШИБКА 1С:ПРЕДПРИЯТИЯ «ПОТЕРЯНО СОЕДИНЕНИЕ»
У пользователя во время работы может возникать сообщение: [crayon-63c0430add38c987527644/] После чего рабочий режим либо восстанавливается, либо нет. В сообщении достаточно ясно описана возникшая ситуация, но необходимо понимать, что по другую сторону экрана пользователя, ландшафт системы может быть несколько сложнее, чем он себе представляет. И сервер «с которым потеряно соединение» может быть не только сервер 1С:Предприятия. […]

Хранение файлов 1С в томах на nfs-шаре Linux
Пошаговая настройка варианта хранения файлов 1С Предприятия во внешнем NFS хранилище на ОС Linux
Источник
17.04.07 — 06:41
При получении любым способом доступа к документу (документ примерно вычислил) программа вылетает и выдает
Ошибка СУБД :
Microsoft OLE DB Provider for SQL Server :
Page (1:1083352), slot 82 for text, ntext, or image node does not exist
HRESULT=80004005,SQLSTATE=HY000,native=7105
Error: 7105, Severity: 22, State: 6
Не можем сделать ни перепроведение, ни восстановление последовательности, ни перенос данных, работа по сути парализована.
SQL server знаю плохо, размер базы 11Гб
Пробовал запускать Integrity Checks Job for DB Maintenance Plan — проходит несколько суток и не понятно работает она или нет ибо ничего не происходит.
Я даже готов вручную удалить эти документы из таблиц, только не знаю как к ним подобраться. Подскажите кто сталкивался с такой проблемой, как ее максимально быстро решить, время уже поджимает, бухгалтерия не может никак март закрыть изза этого…
1 — 17.04.07 — 06:41
2 — 17.04.07 — 08:35
Попробуйте на SQL.RU там вам именно по СУБД толково объяснят
3 — 17.04.07 — 08:37
(0) Можно удалить из EM
4 — 17.04.07 — 08:49
результат select @@version в студию.
5 — 17.04.07 — 08:52
Microsoft SQL Server 2000 — 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: )
6 — 17.04.07 — 09:13
dbcc что говорит?
7 — 17.04.07 — 09:23
8 — 17.04.07 — 09:24
RESOLUTION
Hotfix information
A supported hotfix is now available from Microsoft, but it is only intended to correct the problem that is described in this article. Only apply it to systems that are experiencing this specific problem. This hotfix may receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next SQL Server 2000 service pack that contains this hotfix.
To resolve this problem immediately, contact Microsoft Product Support Services to obtain the hotfix. For a complete list of Microsoft Product Support Services telephone numbers and information about support costs, visit the following Microsoft Web site:
http://support.microsoft.com/contactus/?ws=support
Note In special cases, charges that are ordinarily incurred for support calls may be canceled if a Microsoft Support Professional determines that a specific update will resolve your problem. The usual support costs will apply to additional support questions and issues that do not qualify for the specific update in question.
Prerequisites
This hotfix requires SQL Server 2000 Service Pack 3 (SP3). For information about how to obtain SQL Server 2000 SP3, see the following article in the Microsoft Knowledge Base:
290211 How to obtain the latest SQL Server 2000 Service Pack
Additionally, this hotfix requires that you have SQL Server 2000 post-Service Pack 3hotfix build 2000.80.977 installed. For more information about SQL Server 2000 post-Service Pack 3 hotfix build 2000.80.977, click the following article number to view the article in the Microsoft Knowledge Base:
888007 You receive a «The product does not have a prerequisite update installed» error message when you try to install a SQL Server 2000 post-Service Pack 3 hotfix
9 — 17.04.07 — 09:26
(8)
CAUSE
This problem occurs if the following conditions are true:• You are running SQL Server 2000 with an affinity mask.
• The affinity mask is set to use a number of processors that is a multiple of seven.
10 — 17.04.07 — 09:26
>number of processors that is a multiple of seven
не думаю что у него столько есть
11 — 17.04.07 — 09:27
получается надо пставить
Пакет обновления 4 (SP4) для SQL Server 2000
или даже
SQL Server 2005
12 — 17.04.07 — 09:27
(10) :))
13 — 17.04.07 — 09:31
Как то это не по людски 11 Гб на DE держать… в качестве сервера наверное WinXP?..
14 — 17.04.07 — 09:31
(11) не выдумывай, а.. если не разбираешься.. что те dbcc говорит?
15 — 17.04.07 — 09:32
(13) халявят они.
16 — 17.04.07 — 09:35
хорошая идея — dbcc — запустил
CHECKDB found 1 allocation errors and 18 consistency errors in database ‘test’.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (test_UPR_err repair_rebuild).
запустил и его
CHECKDB found 1 allocation errors and 20 consistency errors in database ‘test_UPR_err’.
CHECKDB fixed 1 allocation errors and 20 consistency errors in database ‘test_UPR_err’.
DBCC execution completed.
Вот только теперь не знаю сделал он мне data_loss или нет? Подскажите как проверить?
17 — 17.04.07 — 09:43
(16) останавливаешь сервер. копируешь файлы куда нить. запускаешь с repair_allow_data_loss . смотришь.
18 — 17.04.07 — 09:44
и?
19 — 17.04.07 — 09:44
(16) а , дык ты запустил.. ну тогда запускаешь ТИИ.
20 — 17.04.07 — 09:45
я сделал копию — запустил — получил что вроде все исправлено — а как теперь проверить — есть потеря данных или нет — он это в логе как отмечает??
21 — 17.04.07 — 09:47
ТИИ — Это чего такое?
bonik
22 — 17.04.07 — 10:01
ТиИ — Тестирование и Исправление ИБ, пункт меню Администрирование Конфигуратора :-))
Describe the issue
In some rare cases database could throw XX000 error with message «cache lookup failed for function «. Reverting to savepoint before query and re-executing query fixes the problem.
According to the autosave parameter description, we expected jdbc driver to fix this error with autosave=conservative but it does not.
Driver Version?
42.2.12
42.2.13-20200331.194247-1
Java Version?
jdk-8.0.252.09-hotspot
OS Version?
Window 7 x64
PostgreSQL Version?
reproduced for: PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11), 64-bit
cannot reproduce for: PostgreSQL 12.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
To Reproduce
Save as «TestXX000.java», modify connection string in getConn() function, compile and run in the presence of jdbc driver:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;
import java.util.Locale;
import java.util.Properties;
public class TestXX000 {
//@fmt:off
private static final String FUNC0 =
"create or replace function public.textXX000_internal(t in text, flag in boolean default true) returns text as $$n" +
"select case when flag then t else (select nspname::text from pg_catalog.pg_namespace where nspname = 'public') endn" +
"$$ language sql stable called on null input;";
private static final String FUNC =
"BEGIN;n" +
"DROP SCHEMA IF EXISTS textXX000 CASCADE;n" +
"CREATE SCHEMA textXX000;n" +
"GRANT USAGE ON SCHEMA textXX000 TO public;n" +
"ALTER DEFAULT PRIVILEGES IN SCHEMA textXX000 GRANT EXECUTE ON FUNCTIONS TO public;n" +
"SET SEARCH_PATH TO testXX000;rn" +
"create or replace function textXX000.testXX000(t in text, i integer) returns text as $$n" +
"beginn" +
" return t || i;n" +
"end;n" +
"$$ language plpgsql stable returns null on null input;" +
"END;";
private static final String FUNCOIDS =
"SELECT n as func, n::regproc::oid as idrn" +
" from unnest('{public.textXX000_internal,textXX000.testXX000}'::text[]) n";
private static final String SQL =
"select textXX000.testXX000(public.textXX000_internal(?), ?);";
//@fmt:on
public static void main(String[] args) throws SQLException, InterruptedException {
Locale.setDefault(Locale.ENGLISH);
Thread thr = new Thread(TestXX000::threadFunc);
thr.start();
Thread.sleep(1000);
try (Connection conn = getConn();
// PreparedStatement ps2 = conn.prepareStatement("DEALLOCATE ALL");
PreparedStatement ps = conn.prepareStatement(SQL)) {
conn.setAutoCommit(false);
for (int i = 0; i < 3; ++i) {
ps.setString(1, "iteration # ");
ps.setInt(2, i);
// ps2.execute();
Savepoint sp = conn.setSavepoint("123");
try (ResultSet rs = ps.executeQuery()) {
boolean b = rs.next();
System.out.println(
"ok: " + b + (b ? " " + ps.getMetaData().getColumnName(1) + " = " + rs.getString(1) : ""));
} catch (SQLException e) {
System.err.println(e.getSQLState() + " " + e.getMessage());
if ("XX000".equals(e.getSQLState()))
conn.rollback(sp);
else
throw e;
} finally {
conn.releaseSavepoint(sp);
}
Thread.sleep(1000);
}
} finally {
thr.interrupt();
thr.join();
}
}
private static void threadFunc() {
try (Connection conn = getConn();
Statement st = conn.createStatement();
PreparedStatement ps = conn.prepareStatement(FUNCOIDS)) {
conn.setAutoCommit(true);
st.execute(FUNC0);
for (int i = 2; i > 0; --i) {
st.execute(FUNC);
try (ResultSet rs = ps.executeQuery()) {
StringBuilder b = new StringBuilder();
while (rs.next()) {
if (b.length() > 0)
b.append(",");
b.append(rs.getString("func")).append("=").append(rs.getLong("id"));
}
System.out.println("recompiled: " + b);
}
Thread.sleep(750);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (SQLException e) {
System.out.println(e.getSQLState());
throw new RuntimeException(e.getMessage(), e);
}
}
private static Connection getConn() throws SQLException {
Properties props = new Properties();
props.setProperty("user", "postgres");
props.setProperty("password", "postgres");
props.setProperty("loggerLevel", "TRACE");
props.setProperty("loggerFile", "pgjdbc-trace.log");
props.put("autosave", "conservative");
// props.put("prepareThreshold", 0);
return DriverManager.getConnection("jdbc:postgresql://IP:5432/DATABASE", props);
}
}
Provided functions and query are the minimal reproduced example.
Expected behaviour
JDBC driver handles «ERROR: cache lookup failed for function <…>» itself, no savepoint required.
The output expected to be:
recompiled: public.textXX000_internal=208173185,textXX000.testXX000=208182048
ok: true testxx000 = iteration # 0
recompiled: public.textXX000_internal=208173185,textXX000.testXX000=208182051
ok: true testxx000 = iteration # 1
ok: true testxx000 = iteration # 2
Actual behaviour
Program must handle error itself, one execution result is missing, actual output is:
recompiled: public.textXX000_internal=208173185,textXX000.testXX000=208182048
ok: true testxx000 = iteration # 0
recompiled: public.textXX000_internal=208173185,textXX000.testXX000=208182051
XX000 ERROR: cache lookup failed for function 208182048
Location: File: lsyscache.c, Routine: get_func_cost, Line: 1616
Server SQLState: XX000
ok: true testxx000 = iteration # 2
May be a postgresql problem, but seems not affected latest postgresql version.
Logs
pgjdbc-trace.log.zip