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 1uR6Ed-006KDL-T6 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jun 2025 09:34:36 +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 1uR6Eb-00GjlC-H4 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jun 2025 09:34:34 +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 1uR6Eb-00Gjl4-5x for pgsql-hackers@lists.postgresql.org; Mon, 16 Jun 2025 09:34:33 +0000 Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uR6EZ-002KZx-2A for pgsql-hackers@lists.postgresql.org; Mon, 16 Jun 2025 09:34:33 +0000 Received: by mail-vk1-xa29.google.com with SMTP id 71dfb90a1353d-5313eff2649so861405e0c.0 for ; Mon, 16 Jun 2025 02:34:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750066470; x=1750671270; 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=TRxSTOdzDyMmjja77hb0MTtYD1Z5V4g1ghttCsy6wd4=; b=SjbfUwa8UXvCsYQTZXqghFr3XNBSRhmsY3fvlk24c+px2DUFEpDF7q0aANKF5xp0Qj X43O/VVno2NSkoJkUS8vuI3BN1nbOywJIsZjJpypomdO5s82twMG47FPyl3BRdK3QHhV osxWjw2IxAsy/Hsy2LoZjWZ9fJDjvL8IrccoJv3Z4cY7wiwbjmogpW03qVYx5VloxPO7 32f5IMU+IwlM9Fqv0GL8wTpntox7jIgqlhL0B3npbkBhVgxjUE/TL+qQ4LRUJoKrOxTs ZRX7CaoHS48/n3z0+fnFCrzFitgOaT/mEmIGJHUvx3WoWMJn/vkhDtjjbGVIPaZZIGoD MqiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750066470; x=1750671270; 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=TRxSTOdzDyMmjja77hb0MTtYD1Z5V4g1ghttCsy6wd4=; b=t4WeQIa88+W/gSAcDnF51bViu/CpcUE1hWweDqgESVw3JKAsjL+RNakiJzQGgfZgiN vaTe/TUgcAEUEJQ61OcJrpgNoAyLyRown4Dr4ZuGIiULzc8tADxJNtxhSUamCmNW5Pob 4Ul3ePGXkVYUEryWjDTw2vbFW9S0M0vte7gS2nvm266GjQb9dlh7Ld6U+Kg5P9dZBFI5 o2zn5qzX7sJKBLnTLmJly5ql0gRUChnGPB/LcCDZUsP7Nbb5WFSGNXomuISLi69JjKqN TK5EWJ2qLVWbgLTgWbr9+06rzP1aYj58E3XgEop5c+4c4UbDbwn+N52z7hp7fgbW1UzC b6hA== X-Gm-Message-State: AOJu0YwtvjhpF0ErifjqTh013aV3rraVQj3SioGpwGJBsxDB2LQVz6xB YAU4g2kmAKKoaZZFPduZQ7zy62ehaBpwrM3acHLeHqJeTltXt9w3dA8tCFZN/ciAPQBs+nQIlx+ aSSQd4C+P01I6T9LhD/xPEP0H63WPnJvoqIBCGT8ifw== X-Gm-Gg: ASbGncvlN73Zs8HdCL6z7MYczeB2z/p1W9ZTOjAUHuGqF9dF0YtPC1EsW0MatiX1tDY NByB3MnebPfXkDXcz/UlHYorlBgBBq6i+rbOUmh+sL2jruklQe7v0S8v8vxsaV0kwwtYWJaAgyT hPM4WXr5KcH7FW53ZcKtKodV105uV1vJvigKgwkFWuixTd4X8hh0cXGNluoAZAEGsHskiYzPR2G g== X-Google-Smtp-Source: AGHT+IF/Q9joxLOwrZFQ6zKE/NH6qy/Bsc4Ps1UidSfjjHd89UmQXIUF6Das5RkV/8QT9+5F4TuHKEklpwrxI4QLzTI= X-Received: by 2002:a05:6122:91e:b0:531:2d3a:32aa with SMTP id 71dfb90a1353d-531493eb7d5mr4634860e0c.0.1750066469808; Mon, 16 Jun 2025 02:34:29 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <7fdaf3e8-4c05-4739-bee6-98acc068d1c7@postgrespro.ru> <4433b492-9e97-4334-96d9-ddaaa5083099@postgrespro.ru> <67ecf5fb-e63d-4284-be75-d0479eef81aa@postgrespro.ru> <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> <1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru> <9c1b75f1-5c40-4a86-9a61-a4b3f1d7ec60@postgrespro.ru> <7e1c67b8-ceba-4a04-964a-853eedeb02cc@postgrespro.ru> In-Reply-To: From: jian he Date: Mon, 16 Jun 2025 17:33:52 +0800 X-Gm-Features: AX0GCFuIRiHh3C7hvSu_yPhoLVCW9YrNbsISnj05IiLlepCedYrUThWCFyvIu20 Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000449fa50637ad1a5b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000449fa50637ad1a5b Content-Type: text/plain; charset="UTF-8" for v45. + foreach_ptr(CookedConstraint, ccon, cookedConstraints) + { + if (!ccon->skip_validation && ccon->contype == CONSTR_CHECK) + { + Bitmapset *attnums = NULL; + + pull_varattnos((Node *) ccon->expr, 1, &attnums); + + /* + * Add check only if it contains tableoid + * (TableOidAttributeNumber). + */ + if (bms_is_member(TableOidAttributeNumber - FirstLowInvalidHeapAttributeNumber, + attnums)) + { + NewConstraint *newcon; + + newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon->name = ccon->name; + newcon->contype = ccon->contype; + newcon->qual = ccon->expr; + + tab->constraints = lappend(tab->constraints, newcon); + } + } + } we need to expand the virtual generated column here, otherwise, bms_is_member would be not correct. consider case like: CREATE TABLE pp (f1 INT, f2 INT generated always as (f1 + tableoid::int)) PARTITION BY RANGE (f1); CREATE TABLE pp_1 (f2 INT generated always as (f1 + tableoid::int), f1 int); ALTER TABLE pp ATTACH PARTITION pp_1 FOR VALUES FROM (-1) TO (10); CREATE TABLE pp_2 (f2 INT generated always as (f1 + tableoid::int), f1 int); ALTER TABLE pp ATTACH PARTITION pp_2 FOR VALUES FROM (10) TO (20); ALTER TABLE PP add check (f2 > 0); ALTER TABLE pp MERGE PARTITIONS (pp_1, pp_2) INTO pp_12; In this context, the merge partition command needs to evaluate the constraint "pp_f2_check" again on pp_12. attach minor diff fix this problem. --000000000000449fa50637ad1a5b Content-Type: application/octet-stream; name="check_constraint_if_it_contains_tableoid.no-cfbot" Content-Disposition: attachment; filename="check_constraint_if_it_contains_tableoid.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbywd6qa0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggN2U3NzAzYzc5OTcuLjE3OWVhYjEwYzg0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjIzNjcsMTYgKzIyMzY3LDE3IEBAIGNyZWF0 ZVRhYmxlQ29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAog CSAqIG1vZGVsUmVsIGNoZWNrIGNvbnN0cmFpbnQgZXhwcmVzc3Npb24gbWF5IHJlZmVyZW5jZSB0 YWJsZW9pZCwgc28gbGF0ZXIgaW4KIAkgKiBtb3ZlTWVyZ2VkVGFibGVzUm93cywgd2UgbmVlZCBl dnVsYXRlIHRoZSBjaGVjayBjb25zdHJhaW50IGFnYWluIGZvciB0aGUKIAkgKiBuZXdSZWwuIFdl IGNhbiBjaGVjayB3ZWF0aGVyIGNoZWNrIGNvbnN0cmFpbnQgY29udGFpbiB0YWJsZW9pZCByZWZl cmVuY2UKLQkgKiBvciBub3QgdmlhIHB1bGxfdmFyYXR0bm9zLiBCdXQgdW5jb25kaXRpb25hbHkg cmV2YXVsYXRlIGNoZWNrIGNvc250cmFpbnQKLQkgKiBzZWVtcyBtb3JlIHNhZmUuCisJICogb3Ig bm90IHZpYSBwdWxsX3ZhcmF0dG5vcy4KIAkqLwogCWZvcmVhY2hfcHRyKENvb2tlZENvbnN0cmFp bnQsIGNjb24sIGNvb2tlZENvbnN0cmFpbnRzKQogCXsKIAkJaWYgKCFjY29uLT5za2lwX3ZhbGlk YXRpb24gJiYgY2Nvbi0+Y29udHlwZSA9PSBDT05TVFJfQ0hFQ0spCiAJCXsKKwkJCU5vZGUJCSpx dWFsOwogCQkJQml0bWFwc2V0CSAgKmF0dG51bXMgPSBOVUxMOwogCi0JCQlwdWxsX3ZhcmF0dG5v cygoTm9kZSAqKSBjY29uLT5leHByLCAxLCAmYXR0bnVtcyk7CisJCQlxdWFsID0gZXhwYW5kX2dl bmVyYXRlZF9jb2x1bW5zX2luX2V4cHIoY2Nvbi0+ZXhwciwgbmV3UmVsLCAxKTsKKwkJCXB1bGxf dmFyYXR0bm9zKHF1YWwsIDEsICZhdHRudW1zKTsKIAogCQkJLyoKIAkJCSAqIEFkZCBjaGVjayBv bmx5IGlmIGl0IGNvbnRhaW5zIHRhYmxlb2lkCkBAIC0yMjM5MCw3ICsyMjM5MSw3IEBAIGNyZWF0 ZVRhYmxlQ29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAog CQkJCW5ld2NvbiA9IChOZXdDb25zdHJhaW50ICopIHBhbGxvYzAoc2l6ZW9mKE5ld0NvbnN0cmFp bnQpKTsKIAkJCQluZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOwogCQkJCW5ld2Nvbi0+Y29udHlw ZSA9IGNjb24tPmNvbnR5cGU7Ci0JCQkJbmV3Y29uLT5xdWFsID0gY2Nvbi0+ZXhwcjsKKwkJCQlu ZXdjb24tPnF1YWwgPSBxdWFsOwogCiAJCQkJdGFiLT5jb25zdHJhaW50cyA9IGxhcHBlbmQodGFi LT5jb25zdHJhaW50cywgbmV3Y29uKTsKIAkJCX0K --000000000000449fa50637ad1a5b--