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 1wN1pO-000WZS-15 for pgsql-hackers@arkaria.postgresql.org; Wed, 13 May 2026 05:08:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wN1pL-007PzO-1a for pgsql-hackers@arkaria.postgresql.org; Wed, 13 May 2026 05:08:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wN1pL-007PzF-0h for pgsql-hackers@lists.postgresql.org; Wed, 13 May 2026 05:08:11 +0000 Received: from mail-qv1-xf33.google.com ([2607:f8b0:4864:20::f33]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wN1pI-00000000LHP-4B29 for pgsql-hackers@postgresql.org; Wed, 13 May 2026 05:08:11 +0000 Received: by mail-qv1-xf33.google.com with SMTP id 6a1803df08f44-8b45dff1eebso60520616d6.2 for ; Tue, 12 May 2026 22:08:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1778648887; cv=none; d=google.com; s=arc-20240605; b=NrDRdTCWreXXuoyHmPZVqFwa7xqntrTgWxJU2AKvTmrfj4HFX1IrNhZDeBxMHb6dND 0aCQc5lWqNPPAFho+WqKpgxNfKSlthN10oar23zWyxy3PkJ3AYJhxKfTScuaTNNoQWdP GkiUVrusXeePB4BLJjYmXNQn65EDQwo9B8eaN+sxrGx+O8dUDacY4Kik3dWB9muF2tgb vIutlbUU5KmpxC7vB1p1p+4s/rvdgyvvjXYoXwU0Hfim0v5NGIt2xw9Av45mKNjWpf4+ eVOMIAxKqHTYJOD31l8lOpggSCmigGykMwia8I2t+sgCx6lBHQRiA2PFk/xK3Wkn40dp F7nA== 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=4XR0GmCGddnNoQuDBKs2QUNm8U3TFrUVsQfKyjSp+ZA=; fh=LZx7bqliEXjjL9tgoLnEdPl/x0VAeO6X3RBwOhBIiUQ=; b=LX6HHT2K38Bbk+7WAMEm0XBhAvprp1pNyj2dLKkc+Z+pJ5W3QxL7Q91+Ppg4NMCt7y LvcNvxep0z4d5aAl41JVTx30z4+COvXJ14f7XKz7Tw03pnbeVHivPMD0sfGxomUTn8H+ tumPO4D9haeAGWUfTmxr7p4dxZImnrUJF/Wpn+pcV5cBYAi99Hj8sBZWaE9y3RW6jf9i AcgJJkEMih6n7/odlrorvtyYqgC9/3W20bICOBNiY8UMETVfoplLa1YrioJD5z569Ljs bQE4SzgN+8PWMVjuVbMvyJM2AyWkhSQRyA4CNDns3akYhmbK8CjvKgo6BXJVnyslgzTM 8wpA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778648887; x=1779253687; darn=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=4XR0GmCGddnNoQuDBKs2QUNm8U3TFrUVsQfKyjSp+ZA=; b=SzPIeM40B7GSt1SpCK5j03kY99CJPL2MvrUm9kDR3bSRBOlgU5Rw6eqx72HmHrnzYO y7ZQuDfwMM5Ls/HrI0QpGVMLjaxYQMEW0OMQLLLhY1gTczlmqd99zaxkou4YTs5lz9AP kYvw1Gp3tgGJwqux1FFPkHx0VDhrkusyJ2u07cMjl3NUWwIXjkPpZoFQhIXiBZLQdAbA 6hdA5W9lBbIuQXM6bZ5Si9HWVbHkKKeoJxBc1oFmGe056X6GbRaAhwfcfKrT0iY9xdqi hH9WjbxliyH7YuMR1ZxtTsJIO3S8NPX5rOfaArVBCKqWdRb43GQ4XQqrijq940tK4fX9 D6OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778648887; x=1779253687; 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=4XR0GmCGddnNoQuDBKs2QUNm8U3TFrUVsQfKyjSp+ZA=; b=hdQukL/MQovvaLuR7JprhSzUDXO2O8jc5Ox2kmGmfAQz58adZgptl7c5JmA8U8EHF6 MSIf3yIFoqIOr7UHCopYOpztUupppB73dhoP719Hxe0Su21ODG+02n18A6fxLPNw6d6e MU4mfj6uXiSxL9AlGuc/ko8TyPivr9Xmhtp0gVBU9rZRUlkGvCza7t0bLH0v/1+dnUTA QicXOBaaFVvbBxq1Oyx4KB2LJdEq3CotwoFIOkkiCwyWE2zMXE2Pt6BkDqTZMkrpqtmh MDfBSgqzjgPilOH9Z2O10Xri03XK3fbkZhStUaBfIWmqk3oxau8Z+7LFimwF6ZLJrsJI OvOw== X-Gm-Message-State: AOJu0Yzsq6Cekb+lIbFuNoh58VjZKN9YKI6WuNCWhxAWpBCV67OLyvNw 1duqthtTxI/sulwrAIJg3UvCF6/aiktOF1cDy7fIm7YEdoHby+EeUpGgFIYcBWlGy5Nblm6MSFi 7HoezoDi+i5ro7vVRVvZYieu5YTmLH+c= X-Gm-Gg: Acq92OHniAk9jfDSXEQP0woyKON9Wqn85FSWtiTqK0NjwRhFuxh1wRxE2i+3D7p3o6w IjOI8jqVqL8qJB/gAQN7p6XuCKSHqpgzm3H09mxiMFSyBYUGKvoVyL55zpal9knuufAkmCWCJku TnnosbZ0Fw6pYShRemO8rX6Sz5pOhtLn+LAHV5Gw6+YoDVfpapPpF1jmU04yd681pT/zi89aJBr XKjIDfnEXRoQ5+kzQIeDOGAjQVU3w7Z+CY2TLO653tvsiiP0LPH/kKEcl+h2MBXLVwBad39kLAA I6sZGaIHzD5roI+82Xq1fB4rYbVvnRj2+00YqOQJ+JRRpHKReFM4/WzaJhqu4M1pyr0ORBOfd+D 1pR6lHIFNtfw4oOn5 X-Received: by 2002:a05:6214:5c44:b0:89e:bae9:9d56 with SMTP id 6a1803df08f44-8c7bcfecb3dmr31594846d6.45.1778648887323; Tue, 12 May 2026 22:08:07 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Kirill Reshke Date: Wed, 13 May 2026 10:07:56 +0500 X-Gm-Features: AVHnY4L1aPaMEfzODnStyCIHoCG2HH8e77z4-QFiGD0eb1n0_008kEK6Cbv2QzE Message-ID: Subject: Re: Fix SPLIT PARTITION bound-overlap bug and other improvements To: Chao Li Cc: PostgreSQL-development , Dmitry Koval , Alexander Korotkov Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Wed, 13 May 2026 at 09:39, Chao Li wrote: > > Hi, > > While testing ALTER TABLE ... SPLIT PARTITION, I found a bug and a few behaviors and messages that seem worth improving. > > 0. A bound-overlap bug > > I numbered this item as 0 because I found it after finishing items 1, 2, and 3. While doing a final verification before sending this email, I was surprised to find that the partitioned table ended up with two overlapping partitions. > > Here is a simple repro: > ``` > evantest=# drop table t; > DROP TABLE > evantest=# CREATE TABLE t (i int) PARTITION BY RANGE(i); > CREATE TABLE > evantest=# CREATE TABLE p0a PARTITION OF t FOR VALUES FROM (0) TO (51); > CREATE TABLE > evantest=# CREATE TABLE p0b PARTITION OF t FOR VALUES FROM (51) TO (100); > CREATE TABLE > evantest=# \d+ t; > Partitioned table "public.t" > Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description > --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- > i | integer | | | | plain | | | > Partition key: RANGE (i) > Partitions: > p0a FOR VALUES FROM (0) TO (51) > p0b FOR VALUES FROM (51) TO (100) > > evantest=# ALTER TABLE t SPLIT PARTITION p0a INTO > evantest-# (PARTITION p0a FOR VALUES FROM (0) TO (53), > evantest(# PARTITION pdef DEFAULT); > ALTER TABLE > evantest=# > evantest=# > evantest=# \d+ t; > Partitioned table "public.t" > Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description > --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- > i | integer | | | | plain | | | > Partition key: RANGE (i) > Partitions: > p0a FOR VALUES FROM (0) TO (53) > p0b FOR VALUES FROM (51) TO (100) > pdef DEFAULT > ``` > > As shown above, p0a and p0b now overlap. I think this is a real bug. that's 100% real issue because of planner partition pruning ``` reshke=# CREATE TABLE t (i int) PARTITION BY RANGE(i); CREATE TABLE reshke=# CREATE TABLE p0a PARTITION OF t FOR VALUES FROM (0) TO (51); CREATE TABLE reshke=# insert into t values (50); INSERT 0 1 reshke=# CREATE TABLE p0b PARTITION OF t FOR VALUES FROM (51) TO (100); CREATE TABLE reshke=# insert into t values (51); INSERT 0 1 reshke=# insert into t values (51); INSERT 0 1 reshke=# insert into t values (51); INSERT 0 1 reshke=# ALTER TABLE t SPLIT PARTITION p0a INTO(PARTITION p0a FOR VALUES FROM (0) TO (53),PARTITION pdef DEFAULT); ALTER TABLE reshke=# table t; i ---- 50 51 51 51 (4 rows) reshke=# select * from t where i = 51; i --- (0 rows) reshke=# set enable_partition_pruning to off; SET reshke=# select * from t where i = 51; i ---- 51 51 51 (3 rows) reshke=# `` -- Best regards, Kirill Reshke