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)

54

55#define K_VERS_1_8 MAKE_ARCHIVE_VERSION(1, 8, 0)

56

57

58#define K_VERS_1_9 MAKE_ARCHIVE_VERSION(1, 9, 0)

59

60#define K_VERS_1_10 MAKE_ARCHIVE_VERSION(1, 10, 0)

61#define K_VERS_1_11 MAKE_ARCHIVE_VERSION(1, 11, 0)

62

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)

66

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

75

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)

85

86#define K_OFFSET_POS_NOT_SET 1

87#define K_OFFSET_POS_SET 2

88#define K_OFFSET_NO_DATA 3

90

91

92

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

190

191

193

194

195

196

197

198

199

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{

217 Archive public;

218 int version;

221

223

224

225 size_t intSize;

226 size_t offSize;

227

229

231

232 time_t createDate;

235

236

237

238

239

240

241

242

244 int readHeader;

245 char *lookahead;

246

248 size_t lookaheadLen;

249 size_t lookaheadPos;

253

255

264

265

267

275

286

287 char *archdbname;

288 char *savedPassword;

291

294 int connectToDB;

295

297 bool pgCopyIn;

303 char *fSpec;

304 FILE *FH;

305 void *OF;

306

307 struct _tocEntry *toc;

308 int tocCount;

311

317

318 bool dosync;

321 void *formatData;

323

324 char *currUser;

327 char *currTableAm;

329

331

345typedef char *(*DefnDumperPtr) (Archive *AH, const void *userArg, const TocEntry *te);

347

349{

355 bool hadDumper;

356

357 char *tag;

358 char *namespace;

359 char *tablespace;

360

361 char *tableam;

362 char relkind;

369 int nDeps;

373 void *formatData;

374

377 size_t defnLen;

379

381 int reqs;

382

383 bool created;

384

385

388 int depCount;

389 DumpId *revDeps;

390 int nRevDeps;

391 DumpId *lockDeps;

392 int nLockDeps;

394

401

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