Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxkYl-00H66O-2J for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 11:38:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxkYk-00CZXA-0m for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 11:38:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxkVh-00CVi2-2K for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 11:35:26 +0000 Received: from udcm-wwu2.uni-muenster.de ([128.176.118.28]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vxkVf-00000000MfR-0knb for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 11:35:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=uni-muenster.de; i=@uni-muenster.de; q=dns/txt; s=uniout; t=1772624123; x=1804160123; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=vPGFT00DF+Y55FxSanDfxP2He2wm56TSEeEwAmUnOZw=; b=wVgKE30xNyOugthVE1XKwL+206nKcFEMzjf0Zsr3FY/UrwQP52rEFg4J M9c/GhlQno8MFCmHxDzF6anqrURTrftUcu/NejA6mxrdYLQ6VEBMEI7fA 7XBaumWBoM2zLWa0cp3eit4hYsyxttEFe0l0B694GrcYF0z7IpX45yKyK jJb+0yWCEdIA9qDIAYAfgavyeV1J7c8yLexycAMbOGiptCnXHvWOz2RuT FAOU1M/7IHiRwMlIYYm6YTABAwOhlpPWJtR69Kag7mhOFuus6fbY11N+h Pjb2Lm2rFnLKRv1WMvho2lMNe8OFqTEoI5w1OUU14myxpSOAsw3DbPavv g==; X-CSE-ConnectionGUID: qd0fMGjdRNG9citzIVC+gQ== X-CSE-MsgGUID: 3/9IOh4tQLeUVfJx28p9Tw== X-IronPort-AV: E=Sophos;i="6.21,323,1763420400"; d="scan'208";a="386679764" Received: from secmail.uni-muenster.de ([128.176.118.4]) by UDCM-RELAY2.UNI-MUENSTER.DE with ESMTP; 04 Mar 2026 12:35:19 +0100 Received: from [192.168.178.27] (dynamic-002-243-238-254.2.243.pool.telefonica.de [2.243.238.254]) by SECMAIL.UNI-MUENSTER.DE (Postfix) with ESMTPSA id 0F4DD20ADF0E; Wed, 4 Mar 2026 12:35:18 +0100 (CET) Message-ID: Date: Wed, 4 Mar 2026 12:35:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: Pavel Stehule Cc: PostgreSQL Hackers References: Content-Language: de-DE, en-GB From: Jim Jones In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk I reviewed the code I have nothing to add at this point. LGTM! The tests touch a lot of different scenarios, but for the sake of completeness I'd like to suggest adding these three cases: -- EXIT and CONTINUE can be triggered by LOOP_RC_PROCESSING DO $$ DECLARE x int; BEGIN FOREACH x IN JSON ARRAY '[1,2,3,4,5]' LOOP EXIT WHEN x = 3; RAISE NOTICE '%', x; END LOOP; END; $$; DO $$ DECLARE x int; BEGIN FOREACH x IN JSON ARRAY '[1,2,3,4,5]' LOOP CONTINUE WHEN x % 2 = 0; RAISE NOTICE '%', x; END LOOP; END; $$; -- Variable instead of string DO $$ DECLARE x int; arr jsonb; BEGIN SELECT jsonb_agg(i) INTO arr FROM generate_series(1,3) i; FOREACH x IN JSON ARRAY arr LOOP RAISE NOTICE '%', x; END LOOP; END; $$; Thanks! Best, Jim