summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorRobert Haas2022-02-02 18:50:33 +0000
committerRobert Haas2022-02-02 18:50:33 +0000
commit8e2b6d45a033287da7c8f63062129ea02d86d831 (patch)
tree5646b26b11d68619f3b494a3b15b8177c53bd349 /src/backend
parent87669de72c2249e6aec84b8c27fdc3ffb7284e13 (diff)
Fix server crash bug in 'server' backup target.
When this code executed as superuser it appeared to work because no system catalog lookups happened, but otherwise it crashes because there is no transaction environment. Fix that. Report and code change by me. Test case by Dagfinn Ilmari Mannsåker. Discussion: http://postgr.es/m/CA+TgmobiKLXne-2AVzYyWRiO8=rChBQ=7ywoxp=2SmcFw=oDDw@mail.gmail.com
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/replication/basebackup_server.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/replication/basebackup_server.c b/src/backend/replication/basebackup_server.c
index 18b0e11d903..a8786296686 100644
--- a/src/backend/replication/basebackup_server.c
+++ b/src/backend/replication/basebackup_server.c
@@ -10,6 +10,7 @@
*/
#include "postgres.h"
+#include "access/xact.h"
#include "catalog/pg_authid.h"
#include "miscadmin.h"
#include "replication/basebackup.h"
@@ -67,10 +68,12 @@ bbsink_server_new(bbsink *next, char *pathname)
sink->base.bbs_next = next;
/* Replication permission is not sufficient in this case. */
+ StartTransactionCommand();
if (!is_member_of_role(GetUserId(), ROLE_PG_WRITE_SERVER_FILES))
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser or a member of the pg_write_server_files role to create server backup")));
+ CommitTransactionCommand();
/*
* It's not a good idea to store your backups in the same directory that