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 1uPLQ1-005agw-Ds for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Jun 2025 13:23:05 +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 1uPLPz-0031Nu-Eh for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Jun 2025 13:23:04 +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 1uPLPz-0031Nl-3D for pgsql-hackers@lists.postgresql.org; Wed, 11 Jun 2025 13:23:03 +0000 Received: from mail-ua1-x92e.google.com ([2607:f8b0:4864:20::92e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uPLPx-001RQj-38 for pgsql-hackers@lists.postgresql.org; Wed, 11 Jun 2025 13:23:03 +0000 Received: by mail-ua1-x92e.google.com with SMTP id a1e0cc1a2514c-87ec9a4c86cso1269490241.1 for ; Wed, 11 Jun 2025 06:23:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749648179; x=1750252979; 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=OsWlgCx0d/TcE5J/F3fmQx4SccLPr/w3HVVG0mo0N74=; b=Q3ic3Nk27pJ3k08AWDRPP+jVsAZaX3O25HDSWNL6k96T79SSGsKz6pWelaBHmVavhv X19ujWfKA+KXoUJ8z/HSPtKDlGeTC5RLViDtEDnUv+ZJMDirNCQD24RQVI1k88wK2ykQ YpuU0oSZs6Lm7JURDyEDC54tWjRvHSb1bugsngWvPUEH1yjuyx4TI5e8oU+pGipivoZm b7z0igLmgBBDMYljeC/le2D7QQV2xY/qJlUXBHLKdCkAnTQQlXvWWJvACNiTBWY0FsDe jJMRqPdJyw6gJoJ82E0BRqlozO8MMBo3l5fANH1xBX/Mi1PC3vJxiRW/OcbB+UWgSXL6 1PCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749648179; x=1750252979; 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=OsWlgCx0d/TcE5J/F3fmQx4SccLPr/w3HVVG0mo0N74=; b=Gjxh2gbWQGdsqSHd9lj7duTQ3yg30KiEmTdH3dInytRhY80sXUw/2kQ6GIRzWL1uXF FOrxUKQ1eVZOLHb5QD1Kn3CBKGmzn7xD8TAMvqf6IzbbZRZqs8f3tyM+bQQ2I+/ieQXW RmWiA0wD9x8ezqGaSVuQUEqDCsFB0NtJka5kP0stsUnovU4TFj8VIiTL9Lci9QvfqsB/ 6iv0rDQS3z7D+pcUaanCD9cESpvYbtY560iVCOV9p+NEzqnIuA059I416hNI2MFtx/G6 nNuF8uQ9mtenF3TEagrbfRmRkOiRkOfEdVyxHZDi1x6VhdagLj2f/JXH7ntrJKJIL+22 yXvQ== X-Forwarded-Encrypted: i=1; AJvYcCU1PSjyaxvC7h4jcOACowStWbGnvlXQCkYMkWzFhWxFZaBKNjUttxPJiUyzxaPrYQH145xqPzk3LUPlSd8h@lists.postgresql.org X-Gm-Message-State: AOJu0YwOwdYSNRrJ3KVOCWwt/Z0k6R3vA/ptFf1UgTHKUOmgK+dldL1v 9346IzVTqRF+QfUTZejn8xhdON97n8Z6e7RTWqggZ6Lv1b6KnTTX3tWOUjyZ2in/uN4epdX24CY uRx8b3JF5HlDP0tTQPNqeulcwV/WBoQY= X-Gm-Gg: ASbGncvwxsIvZ3iFRx6IhP2CPbXaLTm3E8Cl+Ar0e/ebquabUFSHtEVKM/olQpwPXrM zLQgKz1iNAgDY7to7bFcphq+hvJ9pvH53pJi7cUNi9BPfzpenRJdHYbmhPsjLvHa57TIjAfaGz2 mehu8oBQrTJxsJxErVoGnVXVadfz7O7Dbn80DXx4x72w== X-Google-Smtp-Source: AGHT+IGPTcmTMEEOT7ktdT4yHyCVZduSkEs8WLAeQWK3Dlg+hxzr0Be8bja/28D5RGhQu5M/UtZZ4mnlZoXoxUItIW4= X-Received: by 2002:a05:6122:470b:b0:530:65f0:7fcf with SMTP id 71dfb90a1353d-53122224b27mr2568114e0c.1.1749648179050; Wed, 11 Jun 2025 06:22:59 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <4e2764f7-f6be-478f-8d7f-f921dbd10f5f@postgrespro.ru> <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> <26fe1a14-89aa-415d-a1b1-176526e54d3b@postgrespro.ru> In-Reply-To: <26fe1a14-89aa-415d-a1b1-176526e54d3b@postgrespro.ru> From: jian he Date: Wed, 11 Jun 2025 21:22:22 +0800 X-Gm-Features: AX0GCFtdqVKllLk4l1Vzq0f_lJupOLSk5DJ98rGNxUXb58f5Lu55vpPjWyQhClw Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: Junwang Zhao , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000031edbf06374bb6d4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000031edbf06374bb6d4 Content-Type: text/plain; charset="UTF-8" hi. + /* Copy data from merged partitions to new partition. */ + moveMergedTablesRows(rel, mergingPartitionsList, newPartRel); + + /* Drop the current partitions before attaching the new one. */ + foreach_ptr(RelationData, mergingPartition, mergingPartitionsList) + { + ObjectAddress object; + + /* Get relation id before table_close() call. */ + object.objectId = RelationGetRelid(mergingPartition); + object.classId = RelationRelationId; + object.objectSubId = 0; + + /* Keep the lock until commit. */ + table_close(mergingPartition, NoLock); + + performDeletion(&object, DROP_RESTRICT, 0); + } + list_free(mergingPartitionsList); In here, should performDeletion last flags have PERFORM_DELETION_INTERNAL? also this is not ideal, imagine you first did all the main work in moveMergedTablesRows, then suddenly error out, saying: ERROR: cannot drop table public.pk_1 because other objects depend on it DETAIL: view public.v1 depends on table public.pk_1 HINT: Use DROP ... CASCADE to drop the dependent objects too. (this errhint, seems not ideal in this context) We can perform a preliminary check to determine whether dropping a partition is allowed, and raise an error if it's not. To do it, I invented a new function, performDeletionCheck to verify whether an object can be safely dropped. please check attached, it was based on v43. --00000000000031edbf06374bb6d4 Content-Type: application/octet-stream; name="v43-0001-check-if-we-can-drop-merging-partition-before-actuall.no-cfbot" Content-Disposition: attachment; filename="v43-0001-check-if-we-can-drop-merging-partition-before-actuall.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbrzayk70 RnJvbSA5NmQyZTBkZTg3ZWUwM2EzN2FhMDUzMjQ4NGM3NWEzNzA4MDJiYmUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTEgSnVuIDIwMjUgMjE6MTE6NTUgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 MyAxLzFdIGNoZWNrIGlmIHdlIGNhbiBkcm9wIG1lcmdpbmcgcGFydGl0aW9uIGJlZm9yZQogYWN0 dWFsbHkgZGlkIGl0LgoKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYyB8IDUx ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYyB8IDIxICsrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5k ZW5jeS5oIHwgIDIgKysKIDMgZmlsZXMgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygrKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9kZXBlbmRlbmN5LmMKaW5kZXggMTgzMTZhMzk2OGIuLmFkZDcwNmI5Zjg1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2RlcGVuZGVuY3kuYwpAQCAtMzE5LDYgKzMxOSw1NyBAQCBwZXJmb3JtRGVsZXRpb24o Y29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0LAogCXRhYmxlX2Nsb3NlKGRlcFJlbCwgUm93RXhj bHVzaXZlTG9jayk7CiB9CiAKKworLyoKKyAqIHBlcmZvcm1EZWxldGlvbkNoZWNrOiBDaGVjayB3 aGV0aGVyIGEgc3BlY2lmaWMgb2JqZWN0IGNhbiBiZSBzYWZlbHkgZGVsZXRlZC4KKyAqIFRoaXMg ZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVsZXRpb247IGluc3RlYWQsIGl0IHJhaXNl cyBhbiBlcnJvcgorICogaWYgdGhlIG9iamVjdCBjYW5ub3QgYmUgZGVsZXRlZCBkdWUgdG8gZXhp c3RpbmcgZGVwZW5kZW5jaWVzLgorICoKKyAqIEl0IGNhbiBiZSB1c2VmdWwgd2hlbiB5b3UgbmVl ZCBkZWxldGUgc29tZSBvYmplY3RzIGxhdGVyLiAgU2VlIGNvbW1lbnRzIGluCisgKiBwZXJmb3Jt RGVsZXRpb24gdG9vLgorICogVGhlIGJlaGF2aW9yIG11c3Qgc3BlY2lmaWVkIGFzIERST1BfUkVT VFJJQ1QuCisgKi8KK3ZvaWQKK3BlcmZvcm1EZWxldGlvbkNoZWNrKGNvbnN0IE9iamVjdEFkZHJl c3MgKm9iamVjdCwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhhdmlvciwgaW50IGZsYWdzKQorewor CVJlbGF0aW9uCWRlcFJlbDsKKwlPYmplY3RBZGRyZXNzZXMgKnRhcmdldE9iamVjdHM7CisKKwlB c3NlcnQoYmVoYXZpb3IgPT0gRFJPUF9SRVNUUklDVCk7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVu KERlcGVuZFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJQWNxdWlyZURlbGV0aW9u TG9jayhvYmplY3QsIDApOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMg d2Ugd2FudCBkZWxldGUgbGF0ZXIgKGllLCB0aGUgZ2l2ZW4gb2JqZWN0IHBsdXMKKwkgKiBldmVy eXRoaW5nIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVwZW5kZW50IG9uIGl0KS4KKwkgKi8KKwl0 YXJnZXRPYmplY3RzID0gbmV3X29iamVjdF9hZGRyZXNzZXMoKTsKKworCWZpbmREZXBlbmRlbnRP YmplY3RzKG9iamVjdCwKKwkJCQkJCSBERVBGTEFHX09SSUdJTkFMLAorCQkJCQkJIGZsYWdzLAor CQkJCQkJIE5VTEwsCS8qIGVtcHR5IHN0YWNrICovCisJCQkJCQkgdGFyZ2V0T2JqZWN0cywKKwkJ CQkJCSBOVUxMLAkvKiBubyBwZW5kaW5nT2JqZWN0cyAqLworCQkJCQkJICZkZXBSZWwpOworCisJ LyoKKwkgKiBDaGVjayBpZiBkZWxldGlvbiBpcyBhbGxvd2VkLgorCSAqLworCXJlcG9ydERlcGVu ZGVudE9iamVjdHModGFyZ2V0T2JqZWN0cywKKwkJCQkJCSAgIGJlaGF2aW9yLAorCQkJCQkJICAg ZmxhZ3MsCisJCQkJCQkgICBvYmplY3QpOworCisJLyogQW5kIGNsZWFuIHVwICovCisJZnJlZV9v YmplY3RfYWRkcmVzc2VzKHRhcmdldE9iamVjdHMpOworCisJdGFibGVfY2xvc2UoZGVwUmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKK30KKwogLyoKICAqIHBlcmZvcm1NdWx0aXBsZURlbGV0aW9uczog U2ltaWxhciB0byBwZXJmb3JtRGVsZXRpb24sIGJ1dCBhY3Qgb24gbXVsdGlwbGUKICAqIG9iamVj dHMgYXQgb25jZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggZDZjZTg3ZGQ5NjUuLjU1 MmRiMTY3ODU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjI2MDMsNiArMjI2MDMs MjcgQEAgQVRFeGVjTWVyZ2VQYXJ0aXRpb25zKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCUFzc2VydChPaWRJc1ZhbGlkKG93bmVySWQpKTsKIAlu ZXdQYXJ0UmVsID0gY3JlYXRlUGFydGl0aW9uVGFibGUoY21kLT5uYW1lLCByZWwsIG93bmVySWQp OwogCisJLyoKKwkgKiBQZXJmb3JtIGEgcHJlbGltaW5hcnkgY2hlY2sgdG8gZGV0ZXJtaW5lIHdo ZXRoZXIgaXQncyBzYWZlIHRvIGRyb3AgYWxsCisJICogbWVyZ2luZyBwYXJ0aXRpb25zIGJlZm9y ZSB3ZSBhY3R1YWxseSBkbyBzbyBsYXRlci4gQWZ0ZXIgbWVyZ2luZyByb3dzCisJICogaW50byB0 aGUgbmV3IHBhcnRpdGlvbnMgdmlhIG1vdmVNZXJnZWRUYWJsZXNSb3dzLCBhbGwgb2xkIHBhcnRp dGlvbnMgbmVlZAorCSAqIGJlIGRyb3BwZWQuIEhvd2V2ZXIsIHNpbmNlIHRoZSBkcm9wIGJlaGF2 aW9yIGlzIERST1BfUkVTVFJJQ1QgYW5kIHRoZQorCSAqIG1lcmdlIHByb2Nlc3MgKG1vdmVNZXJn ZWRUYWJsZXNSb3dzKSBjYW4gYmUgdGltZS1jb25zdW1pbmcsIHBlcmZvcm1pbmcgYW4KKwkgKiBl YXJseSBjaGVjayBvbiB0aGUgZHJvcCBlbGlnaWJpbGl0eSBvZiBvbGQgcGFydGl0aW9ucyBpcyBw cmVmZXJhYmxlLgorCSovCisJZm9yZWFjaChsaXN0cHRyLCBtZXJnaW5nUGFydGl0aW9uc0xpc3Qp CisJeworCQlPYmplY3RBZGRyZXNzIG9iamVjdDsKKwkJUmVsYXRpb24JbWVyZ2luZ1BhcnRpdGlv biA9IChSZWxhdGlvbikgbGZpcnN0KGxpc3RwdHIpOworCisJCS8qIEdldCBvaWQgb2YgdGhlIGxh dGVyIHRvIGJlIGRyb3BwZWQgcmVsYXRpb24gKi8KKwkJb2JqZWN0Lm9iamVjdElkID0gUmVsYXRp b25HZXRSZWxpZChtZXJnaW5nUGFydGl0aW9uKTsKKwkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlv blJlbGF0aW9uSWQ7CisJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisKKwkJcGVyZm9ybURlbGV0 aW9uQ2hlY2soJm9iamVjdCwgRFJPUF9SRVNUUklDVCwgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5B TCk7CisJfQorCiAJLyoKIAkgKiBTd2l0Y2ggdG8gdGhlIHRhYmxlIG93bmVyJ3MgdXNlcmlkLCBz byB0aGF0IGFueSBpbmRleCBmdW5jdGlvbnMgYXJlIHJ1bgogCSAqIGFzIHRoYXQgdXNlci4gIEFs c28gbG9jayBkb3duIHNlY3VyaXR5LXJlc3RyaWN0ZWQgb3BlcmF0aW9ucyBhbmQKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9kZXBlbmRlbmN5LmgKaW5kZXggMGVhN2NjZjUyNDMuLmY1NDIzMzQ5OWJmIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL2RlcGVuZGVuY3kuaApAQCAtMTA3LDYgKzEwNyw4IEBAIGV4dGVybiB2b2lkIFJlbGVhc2VE ZWxldGlvbkxvY2soY29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0KTsKIGV4dGVybiB2b2lkIHBl cmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJCQkJCQkJRHJvcEJl aGF2aW9yIGJlaGF2aW9yLCBpbnQgZmxhZ3MpOwogCitleHRlcm4gdm9pZCBwZXJmb3JtRGVsZXRp b25DaGVjayhjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCisJCQkJCQkJCSBEcm9wQmVoYXZp b3IgYmVoYXZpb3IsIGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBwZXJmb3JtTXVsdGlwbGVEZWxl dGlvbnMoY29uc3QgT2JqZWN0QWRkcmVzc2VzICpvYmplY3RzLAogCQkJCQkJCQkJIERyb3BCZWhh dmlvciBiZWhhdmlvciwgaW50IGZsYWdzKTsKIAotLSAKMi4zNC4xCgo= --00000000000031edbf06374bb6d4--