Ошибка субд xx000 error failed to build any 7 way joins

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 joins occurs

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
  1. TopicStarter Overlay

    nix0n

    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

  2. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Есть такая ошибка тут ее описание.


    BabySG,
    28 мар 2008
    #2
  3. TopicStarter Overlay

    nix0n

    Offline

    nix0n

    Регистрация:
    17 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Спасиб.
    Самое интересное, что валится на 1С демо-базе. Похоже господа не утруждают себя отладкой.


    nix0n,
    28 мар 2008
    #3
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. decoder

    8.х
    Postgres (Windows) проблема создания базы

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

  2. Decard

    8.х
    1С 8.1 перенос базы с Postgres 8.2 на 8.3

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

  3. Tronen

    8.х
    Установка Postgres на ubuntu 11.10

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

  4. Tronen

    8.х
    Ошибка в БД на postgres

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

  5. MyNameNoName

    8.х
    Как удаленно узнать postgres x86 или x64?

    MyNameNoName,
    19 дек 2013
    , в разделе: Установка платформы «1С:Предприятие 8»
    Ответов:
    1
    Просмотров:
    862
    safarov
    1 янв 2014

Загрузка…
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

gem

Дата: 08.02.2007 16:01:35

Привет!

У меня скорее не вопрос, а предостережение. Проблема образовалась в следующем: имея стабильный рабочий проект на PostgreSQL 8.1.3 решил перебраться на 8.2 и вляпался в ошибку обработки многоуровневых JOIN. А имено, при отработке запроса вида:

select v1.*,v2.Name1,v2.Name2 from View1 v1 LEFT OUTER JOIN View2 v2 ON (v1.key=v2.key)

где каждый из View, в свою очередь, содержит от 2 до 5 своих JOIN, то получаю ошибку

Error
Failed to build any 7-way joins

Причем может быть 4,5,6-way, в зависимости от количества объединений. Если содержимое View1 и View2 извлечь и просто поместить в один большой запрос select, то он выполняется без ошибок. Об этом глюке было сообщено в Bug report Postgre, на что ихний Tom Lane ответил, что дескать, знаем и уже поправили (это было после выхода 8.2.1), но уже вышла 8.2.2, а проблема все там же. Похоже в погоне за производительностю, разработчики где-то наплутали в обработке объединений из View.
Пока считаю, на данный момент, PostgreSQL 8.1.3 наиболее стабильный вариант.
Если кто может посоветовать решение буду признателен.

СергейК

Дата: 08.02.2007 16:08:15

gem
Привет!

У меня скорее не вопрос, а предостережение. Проблема образовалась в следующем: имея стабильный рабочий проект на PostgreSQL 8.1.3 решил перебраться на 8.2 и вляпался в ошибку обработки многоуровневых JOIN. А имено, при отработке запроса вида:

select v1.*,v2.Name1,v2.Name2 from View1 v1 LEFT OUTER JOIN View2 v2 ON (v1.key=v2.key)

где каждый из View, в свою очередь, содержит от 2 до 5 своих JOIN, то получаю ошибку

Error
Failed to build any 7-way joins

Причем может быть 4,5,6-way, в зависимости от количества объединений. Если содержимое View1 и View2 извлечь и просто поместить в один большой запрос select, то он выполняется без ошибок. Об этом глюке было сообщено в Bug report Postgre, на что ихний Tom Lane ответил, что дескать, знаем и уже поправили (это было после выхода 8.2.1), но уже вышла 8.2.2, а проблема все там же. Похоже в погоне за производительностю, разработчики где-то наплутали в обработке объединений из View.
Пока считаю, на данный момент, PostgreSQL 8.1.3 наиболее стабильный вариант.
Если кто может посоветовать решение буду признателен.

Naskolko ia ponimau, eto byli Vy:
http://archives.postgresql.org/pgsql-bugs/2006-12/msg00196.php
Vas poprosili proverit’ rabotaet li eto s 8.2.1 i Vy ne otvetili … Chto je Vy hotite…
Soobshaite eshe raz, vot vam moi sovet.

   bonik

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

   MRAK

2 — 17.04.07 — 08:35

Попробуйте на SQL.RU там вам именно по СУБД толково объяснят

   чувак

3 — 17.04.07 — 08:37

(0) Можно удалить из EM

   masky

4 — 17.04.07 — 08:49

результат select @@version в студию.

   bonik

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: )

   masky

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

   masky

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.

   masky

10 — 17.04.07 — 09:26

>number of processors that is a multiple of seven

не думаю что у него столько есть

   bonik

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?..

   masky

14 — 17.04.07 — 09:31

(11) не выдумывай, а.. если не разбираешься.. что те dbcc говорит?

   masky

15 — 17.04.07 — 09:32

(13) халявят они.

   bonik

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 или нет? Подскажите как проверить?

   masky

17 — 17.04.07 — 09:43

(16) останавливаешь сервер. копируешь файлы куда нить. запускаешь с repair_allow_data_loss . смотришь.

   bonik

18 — 17.04.07 — 09:44

и?

   masky

19 — 17.04.07 — 09:44

(16) а , дык ты запустил.. ну тогда запускаешь ТИИ.

   bonik

20 — 17.04.07 — 09:45

я сделал копию — запустил — получил что вроде все исправлено — а как теперь проверить — есть потеря данных или нет — он это в логе как отмечает??

   bonik

21 — 17.04.07 — 09:47

ТИИ —  Это чего такое?

  

bonik

22 — 17.04.07 — 10:01

ТиИ — Тестирование и Исправление ИБ, пункт меню Администрирование Конфигуратора :-))

  • Ошибка субд the transaction
  • Ошибка субд запрос commit transaction не имеет соответствующей инструкции
  • Ошибка субд out of memory for query result 1с postgresql
  • Ошибка субд журнал транзакций для базы данных переполнен 1с
  • Ошибка субд microsoft ole db provider for sql server