|
6 | 6 | *
|
7 | 7 | *
|
8 | 8 | * IDENTIFICATION
|
9 |
| - * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.91 1999/11/22 17:56:00 momjian Exp $ |
| 9 | + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.92 1999/11/27 21:52:53 tgl Exp $ |
10 | 10 | *
|
11 | 11 | *-------------------------------------------------------------------------
|
12 | 12 | */
|
@@ -257,14 +257,16 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
|
257 | 257 | Relation rel;
|
258 | 258 | extern char *UserName; /* defined in global.c */
|
259 | 259 | const AclMode required_access = from ? ACL_WR : ACL_RD;
|
260 |
| - LOCKMODE required_lock = from ? AccessExclusiveLock : AccessShareLock; |
261 |
| - /* Note: AccessExclusive is probably overkill for copying to a relation, |
262 |
| - * but that's what the existing code grabs on the rel's indices. If |
263 |
| - * this is relaxed then I think the index locks need relaxed also. |
264 |
| - */ |
265 | 260 | int result;
|
266 | 261 |
|
267 |
| - rel = heap_openr(relname, required_lock); |
| 262 | + /* |
| 263 | + * Open and lock the relation, using the appropriate lock type. |
| 264 | + * |
| 265 | + * Note: AccessExclusive is probably overkill for copying to a relation, |
| 266 | + * but that's what the code grabs on the rel's indices. If this lock is |
| 267 | + * relaxed then I think the index locks need relaxed also. |
| 268 | + */ |
| 269 | + rel = heap_openr(relname, (from ? AccessExclusiveLock : AccessShareLock)); |
268 | 270 |
|
269 | 271 | result = pg_aclcheck(relname, UserName, required_access);
|
270 | 272 | if (result != ACLCHECK_OK)
|
@@ -349,7 +351,12 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
|
349 | 351 | }
|
350 | 352 | }
|
351 | 353 |
|
352 |
| - heap_close(rel, required_lock); |
| 354 | + /* |
| 355 | + * Close the relation. If reading, we can release the AccessShareLock |
| 356 | + * we got; if writing, we should hold the lock until end of transaction |
| 357 | + * to ensure that updates will be committed before lock is released. |
| 358 | + */ |
| 359 | + heap_close(rel, (from ? NoLock : AccessShareLock)); |
353 | 360 | }
|
354 | 361 |
|
355 | 362 |
|
|
0 commit comments