Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a9cf48a

Browse files
author
Amit Kapila
committed
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 case 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 4dded12 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
1 parent 39e7bcb commit a9cf48a

File tree

1 file changed

+1
-6
lines changed

1 file changed

+1
-6
lines changed

src/backend/commands/copy.c

+1-6
Original file line numberDiff line numberDiff line change
@@ -1081,13 +1081,8 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt,
10811081
EndCopyTo(cstate);
10821082
}
10831083

1084-
/*
1085-
* Close the relation. If reading, we can release the AccessShareLock we
1086-
* got; if writing, we should hold the lock until end of transaction to
1087-
* ensure that updates will be committed before lock is released.
1088-
*/
10891084
if (rel != NULL)
1090-
table_close(rel, (is_from ? NoLock : AccessShareLock));
1085+
table_close(rel, NoLock);
10911086
}
10921087

10931088
/*

0 commit comments

Comments
 (0)