From c083903b993723ea4c99afdc81482a63a939d198 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 14 May 2020 15:04:32 +0530 Subject: [PATCH] Make COPY TO keep locks until the transaction end. COPY TO released the ACCESS SHARE lock immediately when it was done rather than holding on to it until the end of the transaction. This breaks the cases where a REPEATABLE READ transaction could see an empty table if it repeats a COPY statement and somebody truncated the table in the meantime. Before 4dded12faad the lock was also released after COPY FROM, but the commit failed to notice the irregularity in COPY TO. This is old behavior but doesn't seem important enough to backpatch. Author: Laurenz Albe, based on suggestion by Robert Haas and Tom Lane Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/7bcfc39d4176faf85ab317d0c26786953646a411.camel@cybertec.at --- src/backend/commands/copy.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index ac07f75..6d53dc4 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -1081,13 +1081,8 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt, EndCopyTo(cstate); } - /* - * Close the relation. If reading, we can release the AccessShareLock we - * got; if writing, we should hold the lock until end of transaction to - * ensure that updates will be committed before lock is released. - */ if (rel != NULL) - table_close(rel, (is_from ? NoLock : AccessShareLock)); + table_close(rel, NoLock); } /* -- 1.8.3.1