Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lWLgl-0007on-VS for pgsql-bugs@arkaria.postgresql.org; Tue, 13 Apr 2021 16:14:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lWLgk-0002py-SB for pgsql-bugs@arkaria.postgresql.org; Tue, 13 Apr 2021 16:14:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <9erthalion6@gmail.com>) id 1lWLgk-0002pr-ME for pgsql-bugs@lists.postgresql.org; Tue, 13 Apr 2021 16:14:54 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from <9erthalion6@gmail.com>) id 1lWLgi-0005Np-KK for pgsql-bugs@lists.postgresql.org; Tue, 13 Apr 2021 16:14:54 +0000 Received: by mail-ed1-x530.google.com with SMTP id s15so20070718edd.4 for ; Tue, 13 Apr 2021 09:14:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=qhbBb1Vjpot8WlCbelYVfVeI+BhSaJ0SXGZBez1R0dU=; b=Sj98L57ktHRi7IyiFT0sDmWAzJoncC//JJBsy7kri8W+GHnEyBNsAoLCceNXocVBvp l00BCLTPTJRhJA7jMXbN9BRNaFDYn1JJtADmpzz7f/eHDW8gE8+snHfVKt7ihMi2MMHt 2jmUQfb6FjwzD97VrhSYJWOJgfAu0bcemE632RuUqqaTUpMqNor+98e/CSEGiqyYhoKo s2h9/PlkLi31B+5j31I4zkDDSH+07s/eEjGYc+MUsW7NxtY/5h9sTtyUNyJ6WvOvH1PE sOxuN5lsM3iJ9wUMi5prsTjjCCARPNhnXgbGGUlXtPbziLCjLVIUZ0nhPw0cA+JVclxL AsQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=qhbBb1Vjpot8WlCbelYVfVeI+BhSaJ0SXGZBez1R0dU=; b=qpthpWbJMwJjmnMmaKcWocJHPteDNK/UvNX27iWBG5MR+FOAfW4WByzGTZZO100Wzr xRliGa3JCgoqDhWa7+nNvU/FxaP6mABHpffjqq1OGvCmTwW3yMpQGOgr8CLwYF5mrQLH RruNL5vhCmZ5m8dLRm5ZdFW4icAgKCHK58jB9F+kUlYCLZ+vC3SaO1VaHsRpIJwyu3bI lr6VXIpbq9a5lGxlwYYlqz8H5UDHqjH+i1BHg0ARjOMgtWLxy3p+uB0wSZu31lXaw7PV 4NC3W/lCoKv8CqmM82N+ScvJafsuRx4DmFL9yIrphez0WixGszPWbkP1vELFzWkV2YTf MT/Q== X-Gm-Message-State: AOAM530pK+aKViTDR4+MRQIVjMryvXtPTKwInmAlSvDeb93pNUNZCrJf lnXYumBIyzqLzZatSfKmUK0= X-Google-Smtp-Source: ABdhPJzLA/OF3gInTHCy78rMNZuu50pyoIr/USLrme7CbDqXdmjidEUxLI/PdAfMEhHSv05+ytUkWA== X-Received: by 2002:a50:ec92:: with SMTP id e18mr26396205edr.246.1618330491165; Tue, 13 Apr 2021 09:14:51 -0700 (PDT) Received: from localhost (dslb-178-012-047-165.178.012.pools.vodafone-ip.de. [178.12.47.165]) by smtp.gmail.com with ESMTPSA id u13sm8421874ejn.59.2021.04.13.09.14.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Apr 2021 09:14:50 -0700 (PDT) Date: Tue, 13 Apr 2021 18:15:00 +0200 From: Dmitry Dolgov <9erthalion6@gmail.com> To: "Poot, Bas (B.J.)" Cc: "pgsql-bugs@lists.postgresql.org" Subject: Re: XX000: unknown type of jsonb container. Message-ID: <20210413161500.kufk4iyrmcmhhbrc@localhost> References: <534fca83789c4a378c7de379e9067d4f@politie.nl> <20210407181105.lmi7hgifwzs3eeee@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210407181105.lmi7hgifwzs3eeee@localhost> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk > On Wed, Apr 07, 2021 at 08:11:05PM +0200, Dmitry Dolgov wrote: > > On Wed, Apr 07, 2021 at 10:59:31AM +0000, Poot, Bas (B.J.) wrote: > > > > Finally! I have a testcase for you guys. This is my query to generate the data. > > select * > > into tmp_bug2 > > from ( > > select 'thing' as logical_name > > , 'thing' as display_name > > , 'thing' as operation > > , '{"unit": "Our special Unit", "some.place": "placename", "place_of_birth": "Over the rainbow", "How_secret_is_it": "Level 1", "Does.it.shoot": "YES!"}'::jsonb as filtur > > from generate_series(1, 302443) > > ) t1; > > > > And this is the query that generates the error. > > > > select > > display_name > > ,'' as x > > ,filtur > > ,jsonb_each_text(filtur) as x > > ,to_jsonb(jsonb_each_text(filtur)) as frows > > ,array(SELECT jsonb_object_keys(filtur)) as objectkeys > > from tmp_bug2 > > order by logical_name; > > > > Notice that when you generate not 302443 but 302442 rows, it works perfectly fine. > > Thanks for posting the test case, I can reproduce it on the master > branch as well (also without the second call to jsonb_each_text in line > with to_jsonb). Interesting, it looks like for unclear to me reasons the > argument, evaluated in ExecMakeFunctionResultSet for jsonb_each_text, > contains value from the previous attribute, not jsonb. This makes > iteratorFromContainer complain because both array & object flags are set > in the header. I'll try to investigate, unless someone else will be > faster. Here is what I've found so far: * It seems that technically the regression was introduced in ea190ed14b, but not directly, via using gather paths in more situations. * The direct problem is that JsonbIteratorInit is confused by the argument, because it contains both headers for array and object set. From what I understood this confusion stems from ExecMakeFunctionResultSet taking wrong value from the slot. Hacking it to use different attnum in this case makes it work. * The explanation for this could be that target list from where attnum is taken and slot values have different order of elements. This in turn comes out of grouping planner trying to isolate SRF and SRF-free targets and as a result changing the order of elements in final_target. The final_target is then passed into create_ordered_paths and applied via apply_projection_to_path, but somehow goes in disagreement with what is used while creating the slot with values. If this analysis is correct, I'm not sure yet what would be the best course of action to address the problem, need to think a bit more. But probably others have suggestions or comments?