PostgreSQL Source Code: src/bin/pg_dump/pg_backup_archiver.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef __PG_BACKUP_ARCHIVE__
25#define __PG_BACKUP_ARCHIVE__
26
28
32
33#define LOBBUFSIZE 16384
34
35
36#define BLK_DATA 1
37#define BLK_BLOBS 3
38
39
40#define MAKE_ARCHIVE_VERSION(major, minor, rev) (((major) * 256 + (minor)) * 256 + (rev))
41
42#define ARCHIVE_MAJOR(version) (((version) >> 16) & 255)
43#define ARCHIVE_MINOR(version) (((version) >> 8) & 255)
44#define ARCHIVE_REV(version) (((version) ) & 255)
45
46
47#define K_VERS_1_0 MAKE_ARCHIVE_VERSION(1, 0, 0)
48#define K_VERS_1_2 MAKE_ARCHIVE_VERSION(1, 2, 0)
49#define K_VERS_1_3 MAKE_ARCHIVE_VERSION(1, 3, 0)
50#define K_VERS_1_4 MAKE_ARCHIVE_VERSION(1, 4, 0)
51#define K_VERS_1_5 MAKE_ARCHIVE_VERSION(1, 5, 0)
52#define K_VERS_1_6 MAKE_ARCHIVE_VERSION(1, 6, 0)
53#define K_VERS_1_7 MAKE_ARCHIVE_VERSION(1, 7, 0)
55#define K_VERS_1_8 MAKE_ARCHIVE_VERSION(1, 8, 0)
58#define K_VERS_1_9 MAKE_ARCHIVE_VERSION(1, 9, 0)
60#define K_VERS_1_10 MAKE_ARCHIVE_VERSION(1, 10, 0)
61#define K_VERS_1_11 MAKE_ARCHIVE_VERSION(1, 11, 0)
63#define K_VERS_1_12 MAKE_ARCHIVE_VERSION(1, 12, 0)
64
65#define K_VERS_1_13 MAKE_ARCHIVE_VERSION(1, 13, 0)
67#define K_VERS_1_14 MAKE_ARCHIVE_VERSION(1, 14, 0)
68#define K_VERS_1_15 MAKE_ARCHIVE_VERSION(1, 15, 0)
69
70
71#define K_VERS_1_16 MAKE_ARCHIVE_VERSION(1, 16, 0)
72
73
74
76#define K_VERS_MAJOR 1
77#define K_VERS_MINOR 16
78#define K_VERS_REV 0
79#define K_VERS_SELF MAKE_ARCHIVE_VERSION(K_VERS_MAJOR, K_VERS_MINOR, K_VERS_REV)
80
81
82#define K_VERS_MAX MAKE_ARCHIVE_VERSION(K_VERS_MAJOR, K_VERS_MINOR, 255)
86#define K_OFFSET_POS_NOT_SET 1
87#define K_OFFSET_POS_SET 2
88#define K_OFFSET_NO_DATA 3
90
91
93
94#define WORKER_OK 0
95#define WORKER_CREATE_DONE 10
96#define WORKER_INHIBIT_DATA 11
97#define WORKER_IGNORED_ERRORS 12
98
102
103#define READ_ERROR_EXIT(fd) \
104 do { \
105 if (feof(fd)) \
106 pg_fatal("could not read from input file: end of file"); \
108 pg_fatal("could not read from input file: %m"); \
109 } while (0)
110
111#define WRITE_ERROR_EXIT \
113 pg_fatal("could not write to output file: %m"); \
114 } while (0)
143
147
150
153typedef enum
154{
160typedef struct
163 bool backSlash;
164 PQExpBuffer curCmd;
167typedef enum
174
175typedef enum
176{
177 OUTPUT_SQLCMDS = 0,
181
182
183
184
185
186
187
188
189
191
195
197
198
201typedef enum
207#define RESTORE_PASS_LAST RESTORE_PASS_POST_ACL
210#define REQ_SCHEMA 0x01
211#define REQ_DATA 0x02
212#define REQ_STATS 0x04
213#define REQ_SPECIAL 0x08
216{
218 int version;
223
224
225 size_t intSize;
226 size_t offSize;
227
229
231
232 time_t createDate;
235
239
242
244 int readHeader;
248 size_t lookaheadLen;
249 size_t lookaheadPos;
253
264
275
287 char *archdbname;
288 char *savedPassword;
291
294 int connectToDB;
295
303 char *fSpec;
306
311
317
318 bool dosync;
321 void *formatData;
324 char *currUser;
327 char *currTableAm;
331
345typedef char *(*DefnDumperPtr) (Archive *AH, const void *userArg, const TocEntry *te);
347
349{
358 char *namespace;
359 char *tablespace;
373 void *formatData;
374
382
383 bool created;
384
385
390 int nRevDeps;
392 int nLockDeps;
394
405 const char *namespace;
412 const char *createStmt;
418 const void *dumpArg;
420 const void *defnArg;
422#define ARCHIVE_OPTS(...) &(ArchiveOpts){__VA_ARGS__}
423
426
435
439
440#define appendStringLiteralAHX(buf,str,AH) \
441 appendStringLiteral(buf, str, (AH)->public.encoding, (AH)->public.std_strings)
442
443#define appendByteaLiteralAHX(buf,str,len,AH) \
444 appendByteaLiteral(buf, str, len, (AH)->public.std_strings)
445
446
447
448
449
454
457
462
467
469
472 const char *cmdBegin, const char *cmdEnd);
475
478
479#endif
#define pg_attribute_printf(f, a)
static AmcheckOptions opts
void(* SetupWorkerPtrType)(Archive *AH)
enum _archiveFormat ArchiveFormat
enum _teSection teSection
void DeCloneArchive(ArchiveHandle *AH)
int TocIDRequired(ArchiveHandle *AH, DumpId id)
void ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
void InitArchiveFmt_Null(ArchiveHandle *AH)
void WriteDataChunksForTocEntry(ArchiveHandle *AH, TocEntry *te)
void(* EndLOPtrType)(ArchiveHandle *AH, TocEntry *te, Oid oid)
void WriteHead(ArchiveHandle *AH)
void(* ReadExtraTocPtrType)(ArchiveHandle *AH, TocEntry *te)
size_t WriteInt(ArchiveHandle *AH, int i)
void IssueACLPerBlob(ArchiveHandle *AH, TocEntry *te)
char * ReadStr(ArchiveHandle *AH)
void replace_on_exit_close_archive(Archive *AHX)
void struct _archiveOpts ArchiveOpts
void(* PrintTocDataPtrType)(ArchiveHandle *AH, TocEntry *te)
int(* WorkerJobDumpPtrType)(ArchiveHandle *AH, TocEntry *te)
void(* EndDataPtrType)(ArchiveHandle *AH, TocEntry *te)
void(* StartDataPtrType)(ArchiveHandle *AH, TocEntry *te)
int(* WorkerJobRestorePtrType)(ArchiveHandle *AH, TocEntry *te)
TocEntry * ArchiveEntry(Archive *AHX, CatalogId catalogId, DumpId dumpId, ArchiveOpts *opts)
void InitArchiveFmt_Custom(ArchiveHandle *AH)
ArchiveHandle * CloneArchive(ArchiveHandle *AH)
void InitArchiveFmt_Tar(ArchiveHandle *AH)
size_t WriteOffset(ArchiveHandle *, pgoff_t, int)
void DropLOIfExists(ArchiveHandle *AH, Oid oid)
void(* DeClonePtrType)(ArchiveHandle *AH)
void StartRestoreLOs(ArchiveHandle *AH)
void ReconnectToServer(ArchiveHandle *AH, const char *dbname)
int(* WriteBytePtrType)(ArchiveHandle *AH, const int i)
void(* WriteBufPtrType)(ArchiveHandle *AH, const void *c, size_t len)
void(* ClonePtrType)(ArchiveHandle *AH)
int ReadOffset(ArchiveHandle *, pgoff_t *)
void warn_or_exit_horribly(ArchiveHandle *AH, const char *fmt,...) pg_attribute_printf(2
TocEntry * getTocEntryByDumpId(ArchiveHandle *AH, DumpId id)
void(* ClosePtrType)(ArchiveHandle *AH)
bool isValidTarHeader(char *header)
void(* PrintExtraTocPtrType)(ArchiveHandle *AH, TocEntry *te)
void(* WriteDataPtrType)(ArchiveHandle *AH, const void *data, size_t dLen)
char *(* DefnDumperPtr)(Archive *AH, const void *userArg, const TocEntry *te)
void IssueCommandPerBlob(ArchiveHandle *AH, TocEntry *te, const char *cmdBegin, const char *cmdEnd)
void(* EndLOsPtrType)(ArchiveHandle *AH, TocEntry *te)
int ReadInt(ArchiveHandle *AH)
void(* ArchiveEntryPtrType)(ArchiveHandle *AH, TocEntry *te)
void(* WriteExtraTocPtrType)(ArchiveHandle *AH, TocEntry *te)
void on_exit_close_archive(Archive *AHX)
void WriteDataChunks(ArchiveHandle *AH, struct ParallelState *pstate)
void ReadHead(ArchiveHandle *AH)
void(* StartLOsPtrType)(ArchiveHandle *AH, TocEntry *te)
void ReadToc(ArchiveHandle *AH)
void EndRestoreLO(ArchiveHandle *AH, Oid oid)
int ahprintf(ArchiveHandle *AH, const char *fmt,...) pg_attribute_printf(2
int(* ReadBytePtrType)(ArchiveHandle *AH)
size_t(* CustomOutPtrType)(ArchiveHandle *AH, const void *buf, size_t len)
void WriteToc(ArchiveHandle *AH)
void InitArchiveFmt_Directory(ArchiveHandle *AH)
void(* ReadBufPtrType)(ArchiveHandle *AH, void *buf, size_t len)
void(* StartLOPtrType)(ArchiveHandle *AH, TocEntry *te, Oid oid)
void(* ReopenPtrType)(ArchiveHandle *AH)
void EndRestoreLOs(ArchiveHandle *AH)
void StartRestoreLO(ArchiveHandle *AH, Oid oid, bool drop)
int parallel_restore(ArchiveHandle *AH, TocEntry *te)
void(* PrepParallelRestorePtrType)(ArchiveHandle *AH)
size_t WriteStr(ArchiveHandle *AH, const char *c)
int(* DataDumperPtr)(Archive *AH, const void *userArg)
DeClonePtrType DeClonePtr
DataDirSyncMethod sync_method
struct _tocEntry * lastErrorTE
ReadExtraTocPtrType ReadExtraTocPtr
char * archiveDumpVersion
struct _tocEntry * currentTE
CustomOutPtrType CustomOutPtr
WorkerJobDumpPtrType WorkerJobDumpPtr
PGcancel *volatile connCancel
StartLOsPtrType StartLOsPtr
ArchiveEntryPtrType ArchiveEntryPtr
pg_compress_specification compression_spec
WriteDataPtrType WriteDataPtr
StartLOPtrType StartLOPtr
struct _tocEntry ** tocsByDumpId
WriteBufPtrType WriteBufPtr
PrepParallelRestorePtrType PrepParallelRestorePtr
WriteExtraTocPtrType WriteExtraTocPtr
ReadBytePtrType ReadBytePtr
WorkerJobRestorePtrType WorkerJobRestorePtr
PrintTocDataPtrType PrintTocDataPtr
struct _tocEntry * currToc
WriteBytePtrType WriteBytePtr
ReadBufPtrType ReadBufPtr
PrintExtraTocPtrType PrintExtraTocPtr
ArchiverStage lastErrorStage
StartDataPtrType StartDataPtr
ArchiverOutput outputKind
EndDataPtrType EndDataPtr
char * archiveRemoteVersion
SetupWorkerPtrType SetupWorkerPtr
struct _tocEntry * pending_next
struct _tocEntry * pending_prev
const void * dataDumperArg
const void * defnDumperArg