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 1tzS47-002B4C-FX for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Apr 2025 03:13:27 +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 1tzS46-00FLJ5-2Y for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Apr 2025 03:13: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 1tzS45-00FLIw-NU for pgsql-hackers@lists.postgresql.org; Tue, 01 Apr 2025 03:13:25 +0000 Received: from mail-vk1-xa36.google.com ([2607:f8b0:4864:20::a36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tzS43-002fvX-0m for pgsql-hackers@postgresql.org; Tue, 01 Apr 2025 03:13:25 +0000 Received: by mail-vk1-xa36.google.com with SMTP id 71dfb90a1353d-523eb86b31aso2277938e0c.0 for ; Mon, 31 Mar 2025 20:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743477201; x=1744082001; 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=J4GHSrGODJbr069B368ygHh0y9my+FFVMx/YufXiiEs=; b=SrSrPNqDHag6vB3scob3JZi62jC/fzr2zEjYOs1t5ihPj+2FEJUrp1Y7p2w85xv4Oa 7nCB10zFmPaHi6123K9sIuis4mL4z2wLSoI9G2T5HTlpoWA4sR3rYCRdxHuQj5oFSy4d TlsSWRuZA9p9uvZGCiUY2lZuFyL0x9VIls5yymFQ6YtQroXDePWF/EkcTautYo3ZVEAU aUxzf+cLFlbArG6FpaPQIk8Ds8ODCxPKyxMAUP8ggGkuuwDfMEAKvseS1EJabhDBBQp2 2k2UGpZIf/yIWLjctDYHdiEix5+ijnWP565aeylTvPUHcF1MGZvZfBHZ6xwnhDAZ6nUr bPpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743477201; x=1744082001; 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=J4GHSrGODJbr069B368ygHh0y9my+FFVMx/YufXiiEs=; b=aZ4maalPbBcoUVTMj1arRhMxZw4DyLV4AQV6bwrKRXcuq3kVjNTywRdgS5roFVDIGm +e8KUJwSh6gTqbhPioZhhQW83n5gJ2vmxu7O+iA8XZ/w2oUhPnUsc48D5niuntnmQTGe 7fn+8SABLVPVUKpnvPepeoBaolgeL9p3o22T9rHDCip837qqvlaJCWBPL8paI0uusk4X oGjmL8a+YkkKZmFhwxKh+2fV5I3615CIZc/BSLilZl9+cdKGx87iJ4wD1crosjAh3hTY i/OY7mHbaOVavTfbNDmAjgx+JzVGvOZA96lkUuWWZWaJSjBmDvkciDr3yS8mQftulki4 4t2w== X-Forwarded-Encrypted: i=1; AJvYcCXt7ZyC0VGtCYxS8AlISedMqmkVoguWvAcdJAX08lpEVjd18AruYtpS3hkcCjTeIOJKDnHzblCWT08oy+yH@postgresql.org X-Gm-Message-State: AOJu0Yy8apmiXN28Tortrai2WWOW1Tef/3WsrXgvoRIfrOg8DP9qs0UE i04jXDHZuweem3cI3FlwHNumioa08aC3PDf/2apcwLpgoP/nzkNbUXd2nTf+8UZTGRpyyr9+Ryn L72FwXgH7Ln3OYsVR8IMDXMzfyOc= X-Gm-Gg: ASbGncvBPK16zByF0MFRtPQSnjBYkJMTmVDH6MN7+NsmtEDmlYJBSlgqnsw2fnuy9ET BynTRLVMm2GgMj14/JDJ6nZbHxkKoyhhi91MDrDyQ2b108bOnOrvOorFhWGsw+xW8xdLlrgo3PO mHngxMUPLbNu9W7gRg73V12Wy1LkC+Y4uNU0ulZEdXL3FhZyL2QUxk1A== X-Google-Smtp-Source: AGHT+IHuYQVh+QxdAYQvbm0ReC+CtccA55i+upScBupuuZQvbkCaHTR4ChOWVdwm/XzlMeEDm15CI/7So9ON/zKzdrA= X-Received: by 2002:a05:6102:5e93:b0:4c5:1bff:4589 with SMTP id ada2fe7eead31-4c6d39c5b32mr7662916137.22.1743477201023; Mon, 31 Mar 2025 20:13:21 -0700 (PDT) MIME-Version: 1.0 References: <442e62f7-ef64-4df1-8453-d682fe9bdaa3@dunslane.net> <425ebe4b-06c5-4212-af68-fd0e5537c250@dunslane.net> In-Reply-To: From: jian he Date: Tue, 1 Apr 2025 11:12:45 +0800 X-Gm-Features: AQ5f1JoAm7Fj9eCXG6RLpdj8-DD4wQfwjewgwDEmw-jB-8fzzHjtsLJdIbemzc8 Message-ID: Subject: Re: in BeginCopyTo make materialized view using COPY TO instead of COPY (query). To: Fujii Masao Cc: Andrew Dunstan , "David G. Johnston" , Kirill Reshke , PostgreSQL-development , Tom Lane , Michael Paquier Content-Type: multipart/mixed; boundary="0000000000003de8c40631aeeb25" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003de8c40631aeeb25 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 31, 2025 at 11:27=E2=80=AFPM Fujii Masao wrote: > > Regarding the patch, here are some review comments: > > + errmsg("cannot copy from = materialized view when the materialized view is not populated"), > > How about including the object name for consistency with > other error messages in BeginCopyTo(), like this? > > errmsg("cannot copy from unpopulated materialized view \"%s\"", > RelationGetRelationName(rel)), > > > + errhint("Use the REFRESH = MATERIALIZED VIEW command populate the materialized view first.")); > > There seems to be a missing "to" just after "command". > Should it be "Use the REFRESH MATERIALIZED VIEW command to > populate the materialized view first."? Or we could simplify > the hint to match what SELECT on an unpopulated materialized > view logs: "Use the REFRESH MATERIALIZED VIEW command.". > based on your suggestion, i changed it to: if (!RelationIsPopulated(rel)) ereport(ERROR, errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot copy from unpopulated materialized view \"%s\"", RelationGetRelationName(rel)), errhint("Use the REFRESH MATERIALIZED VIEW command to populate the materialized view first.")); > > The copy.sgml documentation should clarify that COPY TO can > be used with a materialized view only if it is populated. > "COPY TO can be used only with plain tables, not views, and does not copy rows from child tables or child partitions" i changed it to "COPY TO can be used with plain tables and materialized views, not regular views, and does not copy rows from child tables or child partitions" Another alternative wording I came up with: "COPY TO can only be used with plain tables and materialized views, not regular views. It also does not copy rows from child tables or child partitions." > > Wouldn't it be beneficial to add a regression test to check > whether COPY matview TO works as expected? sure. --0000000000003de8c40631aeeb25 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-COPY-materialized_view-TO.patch" Content-Disposition: attachment; filename="v2-0001-COPY-materialized_view-TO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8xx9rvn0 RnJvbSAzZTQwNDgxNzgyN2E1ODcyMWNmODk2NjA4MDQ5MmYxMjU0ZWEwNmNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMSBBcHIgMjAyNSAxMToxMTozMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg MS8xXSBDT1BZIG1hdGVyaWFsaXplZF92aWV3IFRPCgpnZW5lcmFsbHkgYENPUFkgdGFibGUgVE9g IGlzIGZhc3RlciB0aGFuIGBDT1BZIChxdWVyeSlgLgpzaW5jZSBwb3B1bGF0ZWQgbWF0ZXJpYWxp emVkIHZpZXcgaGF2ZSBwaHlzaWNhbCBzdG9yYWdlLCBzbwp0aGlzIGNhbiB1c2UgdGFibGVfYmVn aW5zY2FuLCB0YWJsZV9lbmRzY2FuIHRvIHNjYW4gYSB0YWJsZS4KCmNvbnRleHQ6IGh0dHBzOi8v cG9zdGdyLmVzL20vODk2Ny4xMzUzMTY3MzAxQHNzcy5wZ2gucGEudXMKY29udGV4dDogaHR0cHM6 Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0LzIwMTIxMTE2MTYyNTU4LjkwMTUw JTQwZ214LmNvbQpkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQ0p1ZnhIVnhueVJZ eTY3aGlQZVBOQ1B3VkJNemhUUTZGYUw5X1RlNU9uOXVkRz15Z0BtYWlsLmdtYWlsLmNvbQpjb21t aXRmZXN0IGVudHJ5OiBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcvcGF0Y2gvNTUz My8KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCAgICAgICAgICB8ICA0ICsrLS0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jICAgICAgIHwgMTMgKysrKysrKystLS0tLQogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQgfCAxMSArKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29weTIuc3FsICAgICAgfCAgOCArKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCAyOSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXgg ZGYwOTNkYTk3YzUuLmMzMTA3NDg4YzgxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2Nv cHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbApAQCAtNTIwLDggKzUyMCw4 IEBAIENPUFkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvdW50PC9yZXBsYWNlYWJs ZT4KICAgPHRpdGxlPk5vdGVzPC90aXRsZT4KIAogICAgPHBhcmE+Ci0gICAgPGNvbW1hbmQ+Q09Q WSBUTzwvY29tbWFuZD4gY2FuIGJlIHVzZWQgb25seSB3aXRoIHBsYWluCi0gICAgdGFibGVzLCBu b3Qgdmlld3MsIGFuZCBkb2VzIG5vdCBjb3B5IHJvd3MgZnJvbSBjaGlsZCB0YWJsZXMKKyAgICA8 Y29tbWFuZD5DT1BZIFRPPC9jb21tYW5kPiBjYW4gYmUgdXNlZCB3aXRoIHBsYWluCisgICAgdGFi bGVzIGFuZCBtYXRlcmlhbGl6ZWQgdmlld3MsIG5vdCByZWd1bGFyIHZpZXdzLCBhbmQgZG9lcyBu b3QgY29weSByb3dzIGZyb20gY2hpbGQgdGFibGVzCiAgICAgb3IgY2hpbGQgcGFydGl0aW9ucy4g IEZvciBleGFtcGxlLCA8bGl0ZXJhbD5DT1BZIDxyZXBsYWNlYWJsZQogICAgIGNsYXNzPSJwYXJh bWV0ZXIiPnRhYmxlPC9yZXBsYWNlYWJsZT4gVE88L2xpdGVyYWw+IGNvcGllcwogICAgIHRoZSBz YW1lIHJvd3MgYXMgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBPTkxZIDxyZXBsYWNlYWJsZQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5dG8uYwppbmRleCA4NGEzZjM4NzlhOC4uZWVhYjIyNWE2OTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHl0by5jCkBAIC02NTMsMTEgKzY1MywxNCBAQCBCZWdpbkNvcHlUbyhQYXJzZVN0YXRlICpw c3RhdGUsCiAJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkJCSBlcnJo aW50KCJUcnkgdGhlIENPUFkgKFNFTEVDVCAuLi4pIFRPIHZhcmlhbnQuIikpKTsKIAkJZWxzZSBp ZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9NQVRWSUVXKQotCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCi0JCQkJCSBl cnJtc2coImNhbm5vdCBjb3B5IGZyb20gbWF0ZXJpYWxpemVkIHZpZXcgXCIlc1wiIiwKLQkJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKLQkJCQkJIGVycmhpbnQoIlRyeSB0aGUg Q09QWSAoU0VMRUNUIC4uLikgVE8gdmFyaWFudC4iKSkpOworCQl7CisJCQlpZiAoIVJlbGF0aW9u SXNQb3B1bGF0ZWQocmVsKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQllcnJtc2coImNhbm5vdCBjb3B5IGZy b20gdW5wb3B1bGF0ZWQgbWF0ZXJpYWxpemVkIHZpZXcgXCIlc1wiIiwKKwkJCQkJCQkJUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJCQllcnJoaW50KCJVc2UgdGhlIFJFRlJFU0gg TUFURVJJQUxJWkVEIFZJRVcgY29tbWFuZCB0byBwb3B1bGF0ZSB0aGUgbWF0ZXJpYWxpemVkIHZp ZXcgZmlyc3QuIikpOworCQl9CiAJCWVsc2UgaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfRk9SRUlHTl9UQUJMRSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVS UkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5Mi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dApp bmRleCA2NGVhMzNhZWFlOC4uZjdhYTU1ZTE2OTEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY29weTIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29w eTIub3V0CkBAIC05MjksMyArOTI5LDE0IEBAIHRydW5jYXRlIGNvcHlfZGVmYXVsdDsKIC0tIERF RkFVTFQgY2Fubm90IGJlIHVzZWQgaW4gQ09QWSBUTwogY29weSAoc2VsZWN0IDEgYXMgdGVzdCkg VE8gc3Rkb3V0IHdpdGggKGRlZmF1bHQgJ1xEJyk7CiBFUlJPUjogIENPUFkgREVGQVVMVCBjYW5u b3QgYmUgdXNlZCB3aXRoIENPUFkgVE8KKy0tIENPUFkgVE8gd2l0aCBtYXRlcmlhbGl6ZWQgdmll dworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXcxIEFTIFNFTEVDVCAxIGFzIGlkOwor Q1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXcyIEFTIFNFTEVDVCAxIGFzIGlkIFdJVEgg Tk8gREFUQTsKK2NvcHkgbWF0dmlldzEoaWQpIFRPIHN0ZG91dCB3aXRoIChoZWFkZXIpOworaWQK KzEKK2NvcHkgbWF0dmlldzIgVE8gc3Rkb3V0IHdpdGggKGhlYWRlcik7CitFUlJPUjogIGNhbm5v dCBjb3B5IGZyb20gdW5wb3B1bGF0ZWQgbWF0ZXJpYWxpemVkIHZpZXcgIm1hdHZpZXcyIgorSElO VDogIFVzZSB0aGUgUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyBjb21tYW5kIHRvIHBvcHVsYXRl IHRoZSBtYXRlcmlhbGl6ZWQgdmlldyBmaXJzdC4KK0RST1AgTUFURVJJQUxJWkVEIFZJRVcgbWF0 dmlldzE7CitEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXcyOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIu c3FsCmluZGV4IDQ1MjczNTU3Y2UwLi5lZWVkNzA2NDMxNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weTIuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNx bApAQCAtNzA3LDMgKzcwNywxMSBAQCB0cnVuY2F0ZSBjb3B5X2RlZmF1bHQ7CiAKIC0tIERFRkFV TFQgY2Fubm90IGJlIHVzZWQgaW4gQ09QWSBUTwogY29weSAoc2VsZWN0IDEgYXMgdGVzdCkgVE8g c3Rkb3V0IHdpdGggKGRlZmF1bHQgJ1xEJyk7CisKKy0tIENPUFkgVE8gd2l0aCBtYXRlcmlhbGl6 ZWQgdmlldworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXcxIEFTIFNFTEVDVCAxIGFz IGlkOworQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXcyIEFTIFNFTEVDVCAxIGFzIGlk IFdJVEggTk8gREFUQTsKK2NvcHkgbWF0dmlldzEoaWQpIFRPIHN0ZG91dCB3aXRoIChoZWFkZXIp OworY29weSBtYXR2aWV3MiBUTyBzdGRvdXQgd2l0aCAoaGVhZGVyKTsKK0RST1AgTUFURVJJQUxJ WkVEIFZJRVcgbWF0dmlldzE7CitEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIG1hdHZpZXcyOwotLSAK Mi4zNC4xCgo= --0000000000003de8c40631aeeb25--