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.94.2) (envelope-from ) id 1upIal-002UMD-CS for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Aug 2025 03:37:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1upIak-002vPw-1J for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Aug 2025 03:37:26 +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.94.2) (envelope-from ) id 1upIaj-002vPn-Md for pgsql-hackers@lists.postgresql.org; Fri, 22 Aug 2025 03:37:26 +0000 Received: from mail-vk1-xa2e.google.com ([2607:f8b0:4864:20::a2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1upIai-001Cbh-03 for pgsql-hackers@lists.postgresql.org; Fri, 22 Aug 2025 03:37:26 +0000 Received: by mail-vk1-xa2e.google.com with SMTP id 71dfb90a1353d-53b17378b74so734466e0c.1 for ; Thu, 21 Aug 2025 20:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755833841; x=1756438641; 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=j8aR7ESMDVhzBraO4zxLkhpNwDrOsFKNVZAehbJIYCQ=; b=J60yP0nSGb+5vSm5I4/erfH7RXyVHKZ0ZuCtEwb6YOPPIHvqD7PTE3yOFYGk2l/ZPn 5iPA3A1/eVnuveX0k0UjWY7URCkE8SG1bHsqHBChWpKk7/BCPkImBEb3SrlkB6OvC1yA INpiRFTov4Nfw4c4ca2SVmLNkZxyC+7Ovq1BdvT4cu6sJBQGYHIxnM+Y5dc6dMNRENXy /2lia643W+NCn5cHAno6cfheProH+fkS1upfIEzD2W20y1sxhmq0hOdfQZbNhvOG75jV lHEz6txi6Mz8gyClzdHImRnkZD6wQRpAcY5zttDOFdsLqzq9a/csOA4JWrNUiE1f6Jvd x7aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755833841; x=1756438641; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=j8aR7ESMDVhzBraO4zxLkhpNwDrOsFKNVZAehbJIYCQ=; b=I9ExzDFR9jYrC+ghcWLd42yB90L5nf4AaHiCYEcd5KCLzf15sGSIi2P3rHAxu2brzS 6whzmUXxVsdFH2uy9oVepmhwLO8+kfyD5mdeWRoeHrZyE8qY0UBxt7j3NX9ALNqk+vmi qJEHwIOHB+cI5PZL1gI0fAAxhkdoDkCfmc9sYHRbv9yOHIVbfdMBEvPWue4bDHLzL2e9 QiSa1W60o6CHWn/VlxXJku2N0rV526JYnNCj0xgSvkOFQAxhmIuEMmF6MrI9j0w3ypmW ctXstym6JACGeJVDQdbmquSdjbfobKutpsB+oMxsSM1iMOgJs0mL5wz/Tjq0rbb0E+yL DQig== X-Forwarded-Encrypted: i=1; AJvYcCV4gBad8ABxKuiSVFtKBF97IqydCuuUN0v/abTr/s1XuyIcaoWigXHx174mMJZwu7T1xKNPOeWViu/BLs8I@lists.postgresql.org X-Gm-Message-State: AOJu0YyGzaXASCgn/ML6+pGsJGHmuaN/vGC5Pz8hx9qHottxKzNV7f12 R+autNjsYHTn3xyN8js2ztIp+ZzanEs99HwgcZ1xYQq0U4gXJfJ8Dr1J3VPodZ3gC8qqF2E6uhe cZZikkJC/pLQ2oKAh3lpViDfcGgt+cRA= X-Gm-Gg: ASbGncvVW7ePCJgDC9RbU5VJw2THtxqnZeFHoqjMVqI3Zz6xYxW9MKQ45pugSbZFu37 3jQ/c/Id12hr22Fu72/ChYFQqH3hbuSVZz853ovcirdIhR7wbfhcSJ1p57nUU+Qh0/ZySO8TWEp KoEUrCrEgHQI8WExi6xEdCAm8n77Tsqk33H4xdHpKcR+2LKJjGna/6jKApcuDNZkmifFXmcamgM WU1loWgtJOM1dNC3B2iTWQuHwM5GLajKCd7l+dDkb67AJvTY4rYBjVcR7BnioPULTB7tmg= X-Google-Smtp-Source: AGHT+IHxjI+7h/N1acwb+FuBCF11ZglDsaSwC1Yppg17pI8bHEhumfXdsNfqB89WrqKb5JaxwTchou8Jo+ErhsDIUb8= X-Received: by 2002:a05:6122:3bcb:b0:537:adaa:9046 with SMTP id 71dfb90a1353d-53c8a40bbb3mr450969e0c.10.1755833841586; Thu, 21 Aug 2025 20:37:21 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <0b3907b4-83b9-4873-9feb-2b60b29cda33@postgrespro.ru> <4f19550b-eb41-4649-8bf5-566dc020a720@postgrespro.ru> <195b67ee-ef41-4451-9396-844442eef1a4@postgrespro.ru> In-Reply-To: From: jian he Date: Fri, 22 Aug 2025 11:36:45 +0800 X-Gm-Features: Ac12FXyCayQPopza1EYzmA0jUrxdyrmd2LUkhUBe6hyFgEFsDUWJ0sGNXh2JXk4 Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: Alexander Korotkov , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000069d914063cebec7e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000069d914063cebec7e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Aug 21, 2025 at 2:45=E2=80=AFPM jian he wrote: > > On Thu, Aug 21, 2025 at 10:53=E2=80=AFAM jian he wrote: > > > > > this time, I only checked > > > v52-0001-Implement-ALTER-TABLE-.-MERGE-PARTITIONS-.-comma.patch hi. +static void +check_two_partitions_bounds_range(Relation parent, +{ .... + + ereport(ERROR, + errcode(ERRCODE_INVALID_OBJECT_DEFINITION), + errmsg("lower bound of partition \"%s\" is not equal to the upper bound of partition \"%s\"", + second_name->relname, first_name->relname), + errhint("ALTER TABLE ... MERGE PARTITIONS requires the partition bounds to be adjacent."), + parser_errposition(pstate, datum->location)); + } I propose change it to: ereport(ERROR, errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("can not merge partition \"%s\" together with partition \"%s\"", second_name->relname, first_name->relname), errdetail("lower bound of partition \"%s\" is not equal to the upper bound of partition \"%s\"", second_name->relname, first_name->relname), errhint("ALTER TABLE ... MERGE PARTITIONS requires the partition bounds to be adjacent."), parser_errposition(pstate, datum->location)); + There is also an option for merging multiple table partitions into + a single partition using the + ALTER TABLE ... MERGE PARTITIONS. + This feature simplifies the management of partitioned tables by allow= ing + users to combine partitions that are no longer needed as + separate entities. It's important to note that this operation is not + supported for hash-partitioned tables and acquires an + ACCESS EXCLUSIVE lock, which could impact high-loa= d + systems due to the lock's restrictive nature. For example, we can + merge three monthly partitions into one quarter partition: I am not sure last sentence "merge three monthly partitions into one quarter partition:" is correct. buildExpressionExecutionStates seems not needed, same reason as mentioned before, code pattern aligned with ATRewriteTable. while at it, also did some minor changes. --00000000000069d914063cebec7e Content-Type: application/octet-stream; name="v52-0001-refactor-buildExpressionExecutionStates.no-cfbot" Content-Disposition: attachment; filename="v52-0001-refactor-buildExpressionExecutionStates.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mema3adn0 RnJvbSA4MmZjNTJjNjM4MmM5YTA1YTQ4MDc2ODgxODEyZGFjMDc2OGQyY2UyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjIgQXVnIDIwMjUgMTE6MzE6MDggKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 MiAxLzFdIHJlZmFjdG9yIGJ1aWxkRXhwcmVzc2lvbkV4ZWN1dGlvblN0YXRlcwoKYnVpbGRFeHBy ZXNzaW9uRXhlY3V0aW9uU3RhdGVzIHNlZW1zIG5vdCBuZWNlc3NhcnksCnNvIHJlbW92ZSBpdC4K d2hpbGUgYXQgaXQsIGFsc28gZGlkIHNvbWUgbWlub3IgcmVmYWN0b3IuCi0tLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgfCA2OCArKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggY2MyNGE5MmM1MDQuLmJmNTBkMjA5ZDFjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjIwOTcsNDIgKzIyMDk3LDYgQEAgR2V0QXR0 cmlidXRlU3RvcmFnZShPaWQgYXR0dHlwaWQsIGNvbnN0IGNoYXIgKnN0b3JhZ2Vtb2RlKQogfQog CiAKLS8qCi0gKiBidWlsZEV4cHJlc3Npb25FeGVjdXRpb25TdGF0ZXM6IGJ1aWxkIHRoZSBuZWVk ZWQgZXhwcmVzc2lvbiBleGVjdXRpb24gc3RhdGVzCi0gKiBmb3IgbmV3IHBhcnRpdGlvbiAobmV3 UGFydFJlbCkgY2hlY2tzIGFuZCBpbml0aWFsaXplIGV4cHJlc3Npb25zIGZvcgotICogZ2VuZXJh dGVkIGNvbHVtbnMuIEFsbCBleHByZXNzaW9ucyBzaG91bGQgYmUgY3JlYXRlZCBpbiAidGFiIgot ICogKEFsdGVyZWRUYWJsZUluZm8gc3RydWN0dXJlKS4KLSAqLwotc3RhdGljIHZvaWQKLWJ1aWxk RXhwcmVzc2lvbkV4ZWN1dGlvblN0YXRlcyhBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9u IG5ld1BhcnRSZWwsIEVTdGF0ZSAqZXN0YXRlKQotewotCS8qIEJ1aWxkIHRoZSBuZWVkZWQgZXhw cmVzc2lvbiBleGVjdXRpb24gc3RhdGVzLiAqLwotCWZvcmVhY2hfcHRyKE5ld0NvbnN0cmFpbnQs IGNvbiwgdGFiLT5jb25zdHJhaW50cykKLQl7Ci0JCXN3aXRjaCAoY29uLT5jb250eXBlKQotCQl7 Ci0JCQljYXNlIENPTlNUUl9DSEVDSzoKLQkJCQljb24tPnF1YWxzdGF0ZSA9IEV4ZWNQcmVwYXJl RXhwcigoRXhwciAqKSBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW5fZXhwcihjb24tPnF1YWws IG5ld1BhcnRSZWwsIDEpLCBlc3RhdGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDT05TVFJfRk9S RUlHTjoKLQkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCi0JCQkJYnJlYWs7Ci0JCQljYXNl IENPTlNUUl9OT1ROVUxMOgotCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZS4gKi8KLQkJCQlicmVh azsKLQkJCWRlZmF1bHQ6Ci0JCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBjb25zdHJhaW50 IHR5cGU6ICVkIiwKLQkJCQkJIChpbnQpIGNvbi0+Y29udHlwZSk7Ci0JCX0KLQl9Ci0KLQlmb3Jl YWNoX3B0cihOZXdDb2x1bW5WYWx1ZSwgZXgsIHRhYi0+bmV3dmFscykKLQl7Ci0JCS8qIEV4cHJl c3Npb24gYWxyZWFkeSBwbGFubmVkLiAqLwotCQlleC0+ZXhwcnN0YXRlID0gRXhlY0luaXRFeHBy KChFeHByICopIGV4LT5leHByLCBOVUxMKTsKLQl9Ci19Ci0KIC8qCiAgKiBldmFsdWF0ZUdlbmVy YXRlZEV4cHJlc3Npb25zQW5kQ2hlY2tDb25zdHJhaW50czogZXZhbHVhdGUgYW55IGdlbmVyYXRl ZAogICogZXhwcmVzc2lvbnMgZm9yICJ0YWIiIChBbHRlcmVkVGFibGVJbmZvIHN0cnVjdHVyZSkg d2hvc2UgaW5wdXRzIGNvbWUgZnJvbQpAQCAtMjI0MDAsMTEgKzIyMzY0LDEyIEBAIGNyZWF0ZVRh YmxlQ29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAq LwogCWZvcmVhY2hfcHRyKENvb2tlZENvbnN0cmFpbnQsIGNjb24sIGNvb2tlZENvbnN0cmFpbnRz KQogCXsKLQkJaWYgKCFjY29uLT5za2lwX3ZhbGlkYXRpb24gJiYgY2Nvbi0+Y29udHlwZSA9PSBD T05TVFJfQ0hFQ0spCisJCWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uKQogCQl7CiAJCQlOb2Rl CSAgICpxdWFsOwogCQkJQml0bWFwc2V0ICAqYXR0bnVtcyA9IE5VTEw7CiAKKwkJCUFzc2VydChj Y29uLT5jb250eXBlID09IENPTlNUUl9DSEVDSyk7CiAJCQlxdWFsID0gZXhwYW5kX2dlbmVyYXRl ZF9jb2x1bW5zX2luX2V4cHIoY2Nvbi0+ZXhwciwgbmV3UmVsLCAxKTsKIAkJCXB1bGxfdmFyYXR0 bm9zKHF1YWwsIDEsICZhdHRudW1zKTsKIApAQCAtMjI0MTksNyArMjIzODQsNyBAQCBjcmVhdGVU YWJsZUNvbnN0cmFpbnRzKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAog CQkJCW5ld2NvbiA9IChOZXdDb25zdHJhaW50ICopIHBhbGxvYzAoc2l6ZW9mKE5ld0NvbnN0cmFp bnQpKTsKIAkJCQluZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOwotCQkJCW5ld2Nvbi0+Y29udHlw ZSA9IGNjb24tPmNvbnR5cGU7CisJCQkJbmV3Y29uLT5jb250eXBlID0gQ09OU1RSX0NIRUNLOwog CQkJCW5ld2Nvbi0+cXVhbCA9IHF1YWw7CiAKIAkJCQl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVu ZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24pOwpAQCAtMjI1NzMsNyArMjI1MzgsNyBAQCBjcmVh dGVQYXJ0aXRpb25UYWJsZShMaXN0ICoqd3F1ZXVlLCBSYW5nZVZhciAqbmV3UGFydE5hbWUsCiAv KgogICogTWVyZ2VQYXJ0aXRpb25zTW92ZVJvd3M6IHNjYW4gcGFydGl0aW9ucyB0byBiZSBtZXJn ZWQgKG1lcmdpbmdQYXJ0aXRpb25zKQogICogb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBt b3ZlIHJvd3MgaW50byB0aGUgbmV3IHBhcnRpdGlvbgotICogKG5ld1BhcnRSZWwpLiBXZSBhbHNv IHJlZXZhdWxhdGUgY2hlY2sgY29uc3RyYWludHMgYWdhaW5zdCB0aGVzZSByb3dzLgorICogKG5l d1BhcnRSZWwpLiBXZSBhbHNvIHZlcnRpZnkgY2hlY2sgY29uc3RyYWludHMgYWdhaW5zdCB0aGVz ZSByb3dzLgogICovCiBzdGF0aWMgdm9pZAogTWVyZ2VQYXJ0aXRpb25zTW92ZVJvd3MoTGlzdCAq KndxdWV1ZSwgTGlzdCAqbWVyZ2luZ1BhcnRpdGlvbnMsIFJlbGF0aW9uIG5ld1BhcnRSZWwpCkBA IC0yMjU5NSw3ICsyMjU2MCwzMCBAQCBNZXJnZVBhcnRpdGlvbnNNb3ZlUm93cyhMaXN0ICoqd3F1 ZXVlLCBMaXN0ICptZXJnaW5nUGFydGl0aW9ucywgUmVsYXRpb24gbmV3UGFydAogCS8qIEdlbmVy YXRlIHRoZSBjb25zdHJhaW50IGFuZCBkZWZhdWx0IGV4ZWN1dGlvbiBzdGF0ZXMuICovCiAJZXN0 YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCi0JYnVpbGRFeHByZXNzaW9uRXhlY3V0aW9u U3RhdGVzKHRhYiwgbmV3UGFydFJlbCwgZXN0YXRlKTsKKwkvKgorCSAqIEJ1aWxkIHRoZSBuZWVk ZWQgZXhwcmVzc2lvbiBleGVjdXRpb24gc3RhdGVzLgorCSAqIEhlcmUsIHdlIGV4cGVjdCBvbmx5 IE5PVCBOVUxMIGFuZCBDSEVDSyBjb25zdHJhaW50LgorCSovCisJZm9yZWFjaF9wdHIoTmV3Q29u c3RyYWludCwgY29uLCB0YWItPmNvbnN0cmFpbnRzKQorCXsKKwkJc3dpdGNoIChjb24tPmNvbnR5 cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSX0NIRUNLOgorCQkJCS8qIHdlIGFscmVhZHkgZXhwYW5k ZWQgdmlydHVhbCBleHByZXNzaW9uIGluIGNyZWF0ZVRhYmxlQ29uc3RyYWludHMgKi8KKwkJCQlj b24tPnF1YWxzdGF0ZSA9IEV4ZWNQcmVwYXJlRXhwcigoRXhwciAqKSBjb24tPnF1YWwsIGVzdGF0 ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUl9OT1ROVUxMOgorCQkJCS8qIE5vdGhpbmcg dG8gZG8gaGVyZS4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBjb25zdHJhaW50IHR5cGU6ICVkIiwKKwkJCQkJIChpbnQpIGNvbi0+Y29u dHlwZSk7CisJCX0KKwl9CisKKwkvKiBFeHByZXNzaW9uIGFscmVhZHkgcGxhbm5lZCBpbiBjcmVh dGVUYWJsZUNvbnN0cmFpbnRzICovCisJZm9yZWFjaF9wdHIoTmV3Q29sdW1uVmFsdWUsIGV4LCB0 YWItPm5ld3ZhbHMpCisJCWV4LT5leHByc3RhdGUgPSBFeGVjSW5pdEV4cHIoKEV4cHIgKikgZXgt PmV4cHIsIE5VTEwpOwogCiAJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0 ZSk7CiAKLS0gCjIuMzQuMQoK --00000000000069d914063cebec7e--