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 1vubqz-00FiuL-0q for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 19:44:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vubqx-00Eq2m-2D for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 19:44:23 +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 1vubqx-00Eq2d-15 for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 19:44:23 +0000 Received: from mail-yw1-x1131.google.com ([2607:f8b0:4864:20::1131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vubqt-00000000qTv-3k5j for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 19:44:22 +0000 Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-79801df3e21so45193847b3.2 for ; Mon, 23 Feb 2026 11:44:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771875860; cv=none; d=google.com; s=arc-20240605; b=UaUBp+lVnwGBGtfXnwGP12KVPk0uqpMAUcF7P0Atirqwsxo7qnqmrSAmlJmri14RxT EcF1Tl636buMK2bm6aym+Qw/5f+FNsybtOgC+0iI0FdsOwtcuGIeXijCvUaYlo/h8g0d ugVIRYftyQXgwcGL7DqTKwAu62UnR2pTT7sfukNhT5q0srD0AiKiHrj5y4m4LPmMp2sf TY6eOWawpuPIYhyxqrO4zBX0hXwQZJ2fzAWvU0QvjKLWQZmC6gk0En1x+uHLnrzVmzgF je8IfyObC8SwpoVTxAhdbp3lqxn9d51HrcetDIFp0yc7FZ/AdF2tJ5izEahuUIzaG898 ngZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=lkazvwHJyHPTB2H3eiWIF4IpL+U5j4613JnEpZF91L8=; fh=YGQEW/z3OiW7yv4moI2r3Tr6lhdu1BaJotoh2D+nr1M=; b=aGSgJ8KKejloDmtrskdbyT6oVDbf281ZTK9GP5NGQYO2wqnh0L43oJ5BifenA+JvfW I9U1Alwo4olEwDvWsBToBKya1Rgwb4A0TbVWEndtRqHhn1XMmsN+33x+Acb+c6gATCxg pVAfqerG6I/ipkVukKJWlWQWIAB083ia2M2bG0q/Fjsb9/lU+OS6uXFMpHv71eDcEB8a vFio/R+TobUBwHoTjC1sW/pCh/bBksO3CaFLbySwpn0sOXdd5ZltR1aUAT99K+VR4h1s myVCxMkESSpdQkGLMDFCa64NJ8B9P4LPuE99U8KFHlhsk1vqbuvwDEtW83TfMgGk9iN9 2M8A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=percona.com; s=google; t=1771875860; x=1772480660; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=lkazvwHJyHPTB2H3eiWIF4IpL+U5j4613JnEpZF91L8=; b=Ge+G2Ad93JLIBMqZ16AbQLBB62VtZ0RH8EuhBYDQK3PNB1vvir/Ym0S7XCUhfzkurR D0va2T+wBNZWf/FTHmAo2BTr7YM2PjbZkIQjlCbFSEJGz23Rp8JCtbU8B3dtRGYGt0ZJ GM/qyMBdK1bzP9XNmvnoX+HLQUB/ElamwhCDk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771875860; x=1772480660; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=lkazvwHJyHPTB2H3eiWIF4IpL+U5j4613JnEpZF91L8=; b=Mlnh1ABPHArNZUVxK7mH2ij8jVzgOX/NpYySXTsjKluszaM3EEP/dUFKNLBHE/SiqM Iz79YsMOt1u9uVTUfoJ2z8FkFpzJLd0an14/Cnpj71gNanYIVlfUi7/evveEy3DV0fB8 FdX0gPiuOSGk4kS/ftgFqlBMttrdQP5DpxE9SGB4KkIKHn/9LPEqMc75QGV+oK1rKd7y 325TrnaljcbM53nhX9b0sTOvYqdR7UTqUcnU0t6ixhd8/xZat0O98R5bZ2hAg/j1xUMl tdvSsxbSp6BpqjEE0qpCa5I59DrA3rhXfcsU+87Tz8oe97NA/VwA3nkxqVMre7ElbfMV 5qVA== X-Forwarded-Encrypted: i=1; AJvYcCWXFvEEJnBc9PP1mVyRanHcbH90YIBH2lCPUfyWM9wSkwOydT4Sk/QJfCjVGg4E78g0ntjWYhJC5Spq1yo+@lists.postgresql.org X-Gm-Message-State: AOJu0Yx/JqyEstEYYyJBaBeMOUADP8aWRiPkuE/Tst0I+VnodYVqGBLR mTUVjY0vgiDY+1LPtoq989kPiMCnzp/x/wOw810NR11qtueRfz4v8h2g/55OzqOPjlpJyt3IkyB 8kvnJq67iyHaYuy51hPr9qe+cfq09QF0G7hTBQssMOZupCNoUql3m1pj7TPVddBM+3efXI7Yj7p Hba200Q2cMOtvX/qcDFunhHsA8drhqfpQImjCxvMeRnxsjVnYs2t6mT3ky+/vLbYZdgUNahuaD3 BlXUx4ij8DuPnrdY8/RBio6hTyxQR2TUq/vkFMXeXA0V8Be/7SwZ5qF4MeQ2z5mNzE= X-Gm-Gg: ATEYQzxBxa2EyLAJPawG7JVgs/V5vxBYTIqqRObd3EiNAX2Fg9jyyZiVZ2DtGJVwPGd hySkBzfBfO/3wDuEbShgUtznvwOOPB/vQuedJMxs9eOqVk45uvSCZJI801weXUCkJZefJFubX11 +QI9J5jFp2a+XNBcamEcNteC2yBXCLFUorBjOfOd0ZEDNhEOxxXkyNIoeyelo7ulDvxEASAXHfY bflxjvPldJwvM7EHKiRk7GYut+4fO2y27SAzc4fDBIk+RFnsjWJyHTCp8yNQKIYTqrYfLrMCvR9 /9hnfscf4Z0II+gM2Olc8JB1pY3hAxy71N9gyMIBq/N6pkxwGcLvKEGzZbUf/3ckYFxM X-Received: by 2002:a05:690c:45c7:b0:797:adcf:6800 with SMTP id 00721157ae682-79828f0b49cmr88849707b3.23.1771875860192; Mon, 23 Feb 2026 11:44:20 -0800 (PST) MIME-Version: 1.0 References: <52596e08-0902-475b-ad0f-265ec6918f19@gmail.com> <7791ec74-369d-48c7-969c-cf4ad18024f2@tantorlabs.com> <6b3aebb5-f26c-4f50-abd6-e733d452af26@gmail.com> In-Reply-To: From: Zsolt Parragi Date: Mon, 23 Feb 2026 19:44:07 +0000 X-Gm-Features: AaiRm50WbfkZtRD0zR4rZO_-FSzSrztcfAG2caQ6vf71u48ZvWr1y8-0On_mnKg Message-ID: Subject: Re: Reduce planning time for large NOT IN lists containing NULL To: Ilia Evdokimov Cc: David Geier , PostgreSQL Developers Content-Type: text/plain; charset="UTF-8" X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: percona,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello I think it would be a good idea to add a test, I think there's a regression with this patch: CREATE TABLE notin_test AS SELECT generate_series(1, 1000) AS x; ANALYZE notin_test; CREATE FUNCTION replace_elem(arr int[], idx int, val int) RETURNS int[] AS $$ BEGIN arr[idx] := val; RETURN arr; END; $$ LANGUAGE plpgsql IMMUTABLE; EXPLAIN SELECT * FROM notin_test WHERE x <> ALL(ARRAY[1,99,3]); -- same array, constructed from an array with a NULL EXPLAIN SELECT * FROM notin_test WHERE x <> ALL(replace_elem(ARRAY[1,NULL,3], 2, 99)); DROP TABLE notin_test; DROP FUNCTION replace_elem; ARR_HASNULL probably should be array_contains_nulls, as ARR_HASNULL simply checks for the existence of a NULL bitmap.