mirror of
https://github.com/postgres/postgres.git
synced 2025-10-24 01:29:19 +03:00
Allow "COPY table TO" command to copy rows from materialized views.
Previously, "COPY table TO" command worked only with plain tables and did not support materialized views, even when they were populated and had physical storage. To copy rows from materialized views, "COPY (query) TO" command had to be used, instead. This commit extends "COPY table TO" to support populated materialized views directly, improving usability and performance, as "COPY table TO" is generally faster than "COPY (query) TO". Note that copying from unpopulated materialized views will still result in an error. Author: jian he <jian.universality@gmail.com> Reviewed-by: Kirill Reshke <reshkekirill@gmail.com> Reviewed-by: David G. Johnston <david.g.johnston@gmail.com> Reviewed-by: Vignesh C <vignesh21@gmail.com> Reviewed-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/CACJufxHVxnyRYy67hiPePNCPwVBMzhTQ6FaL9_Te5On9udG=yg@mail.gmail.com
This commit is contained in:
@@ -653,11 +653,14 @@ BeginCopyTo(ParseState *pstate,
|
||||
RelationGetRelationName(rel)),
|
||||
errhint("Try the COPY (SELECT ...) TO variant.")));
|
||||
else if (rel->rd_rel->relkind == RELKIND_MATVIEW)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("cannot copy from materialized view \"%s\"",
|
||||
RelationGetRelationName(rel)),
|
||||
errhint("Try the COPY (SELECT ...) TO variant.")));
|
||||
{
|
||||
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."));
|
||||
}
|
||||
else if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
|
||||
Reference in New Issue
Block a user