aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2012-04-17 16:28:31 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2012-04-17 16:28:31 +0300
commitfe546f3da6a5ff1d879f587728f74ec457f0ee5f (patch)
tree063222b55c6181e3df2c60ec1e1507303741ee5e /src
parentcf714c81086a85b7558a84ebd024f6a5eec2a5ee (diff)
downloadpostgresql-fe546f3da6a5ff1d879f587728f74ec457f0ee5f.tar.gz
postgresql-fe546f3da6a5ff1d879f587728f74ec457f0ee5f.zip
Don't wait for the commit record to be replicated if we wrote no WAL.
When using synchronous replication, we waited for the commit record to be replicated, but if we our transaction didn't write any other WAL records, that's not required because we don't even flush the WAL locally to disk in that case. This lead to long waits when committing a transaction that only modified a temporary table. Bug spotted by Thom Brown.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/xact.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index e22bdacbba2..d8523f37b2f 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -1168,7 +1168,8 @@ RecordTransactionCommit(void)
* Note that at this stage we have marked clog, but still show as running
* in the procarray and continue to hold locks.
*/
- SyncRepWaitForLSN(XactLastRecEnd);
+ if (wrote_xlog)
+ SyncRepWaitForLSN(XactLastRecEnd);
/* Reset XactLastRecEnd until the next transaction writes something */
XactLastRecEnd.xrecoff = 0;