diff options
-rw-r--r-- | src/backend/commands/copy.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 9ab1e1989fb..be829a6eadc 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -785,7 +785,7 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) bool pipe = (stmt->filename == NULL); Relation rel; Oid relid; - RangeTblEntry *rte; + List *range_table = NIL; /* Disallow COPY to/from file or program except to superusers. */ if (!pipe && !superuser()) @@ -810,6 +810,7 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) AclMode required_access = (is_from ? ACL_INSERT : ACL_SELECT); List *attnums; ListCell *cur; + RangeTblEntry *rte; Assert(!stmt->query); @@ -824,6 +825,7 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) rte->relid = RelationGetRelid(rel); rte->relkind = rel->rd_rel->relkind; rte->requiredPerms = required_access; + range_table = list_make1(rte); tupDesc = RelationGetDescr(rel); attnums = CopyGetAttnums(tupDesc, rel, stmt->attlist); @@ -837,7 +839,7 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) else rte->selectedCols = bms_add_member(rte->selectedCols, attno); } - ExecCheckRTPerms(list_make1(rte), true); + ExecCheckRTPerms(range_table, true); } else { @@ -857,7 +859,7 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) cstate = BeginCopyFrom(rel, stmt->filename, stmt->is_program, stmt->attlist, stmt->options); - cstate->range_table = list_make1(rte); + cstate->range_table = range_table; *processed = CopyFrom(cstate); /* copy from file to database */ EndCopyFrom(cstate); } @@ -866,7 +868,6 @@ DoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed) cstate = BeginCopyTo(rel, stmt->query, queryString, stmt->filename, stmt->is_program, stmt->attlist, stmt->options); - cstate->range_table = list_make1(rte); *processed = DoCopyTo(cstate); /* copy from database to file */ EndCopyTo(cstate); } |