mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Allow pg_basebackup to stream transaction log in tar mode
This will write the received transaction log into a file called pg_wal.tar(.gz) next to the other tarfiles instead of writing it to base.tar. When using fetch mode, the transaction log is still written to base.tar like before, and when used against a pre-10 server, the file is named pg_xlog.tar. To do this, implement a new concept of a "walmethod", which is responsible for writing the WAL. Two implementations exist, one that writes to a plain directory (which is also used by pg_receivexlog) and one that writes to a tar file with optional compression. Reviewed by Michael Paquier
This commit is contained in:
45
src/bin/pg_basebackup/walmethods.h
Normal file
45
src/bin/pg_basebackup/walmethods.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* walmethods.h
|
||||
*
|
||||
* Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* src/bin/pg_basebackup/walmethods.h
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
typedef void *Walfile;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CLOSE_NORMAL,
|
||||
CLOSE_UNLINK,
|
||||
CLOSE_NO_RENAME,
|
||||
} WalCloseMethod;
|
||||
|
||||
typedef struct WalWriteMethod WalWriteMethod;
|
||||
struct WalWriteMethod
|
||||
{
|
||||
Walfile(*open_for_write) (const char *pathname, const char *temp_suffix, size_t pad_to_size);
|
||||
int (*close) (Walfile f, WalCloseMethod method);
|
||||
bool (*existsfile) (const char *pathname);
|
||||
ssize_t (*get_file_size) (const char *pathname);
|
||||
|
||||
ssize_t (*write) (Walfile f, const void *buf, size_t count);
|
||||
off_t (*get_current_pos) (Walfile f);
|
||||
int (*fsync) (Walfile f);
|
||||
bool (*finish) (void);
|
||||
char *(*getlasterror) (void);
|
||||
};
|
||||
|
||||
/*
|
||||
* Available WAL methods:
|
||||
* - WalDirectoryMethod - write WAL to regular files in a standard pg_xlog
|
||||
* - TarDirectoryMethod - write WAL to a tarfile corresponding to pg_xlog
|
||||
* (only implements the methods required for pg_basebackup,
|
||||
* not all those required for pg_receivexlog)
|
||||
*/
|
||||
WalWriteMethod *CreateWalDirectoryMethod(const char *basedir, bool sync);
|
||||
WalWriteMethod *CreateWalTarMethod(const char *tarbase, int compression, bool sync);
|
||||
Reference in New Issue
Block a user