mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
This is similar to the -N option in pg_dump, except that it doesn't take a pattern, just like the existing -n option in pg_restore. From: Michael Banck <michael.banck@credativ.de>
294 lines
7.8 KiB
C
294 lines
7.8 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pg_backup.h
|
|
*
|
|
* Public interface to the pg_dump archiver routines.
|
|
*
|
|
* See the headers to pg_restore for more details.
|
|
*
|
|
* Copyright (c) 2000, Philip Warner
|
|
* Rights are granted to use this software in any way so long
|
|
* as this notice is not removed.
|
|
*
|
|
* The author is not responsible for loss or damages that may
|
|
* result from it's use.
|
|
*
|
|
*
|
|
* IDENTIFICATION
|
|
* src/bin/pg_dump/pg_backup.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef PG_BACKUP_H
|
|
#define PG_BACKUP_H
|
|
|
|
#include "fe_utils/simple_list.h"
|
|
#include "libpq-fe.h"
|
|
|
|
|
|
typedef enum trivalue
|
|
{
|
|
TRI_DEFAULT,
|
|
TRI_NO,
|
|
TRI_YES
|
|
} trivalue;
|
|
|
|
typedef enum _archiveFormat
|
|
{
|
|
archUnknown = 0,
|
|
archCustom = 1,
|
|
archTar = 3,
|
|
archNull = 4,
|
|
archDirectory = 5
|
|
} ArchiveFormat;
|
|
|
|
typedef enum _archiveMode
|
|
{
|
|
archModeAppend,
|
|
archModeWrite,
|
|
archModeRead
|
|
} ArchiveMode;
|
|
|
|
typedef enum _teSection
|
|
{
|
|
SECTION_NONE = 1, /* COMMENTs, ACLs, etc; can be anywhere */
|
|
SECTION_PRE_DATA, /* stuff to be processed before data */
|
|
SECTION_DATA, /* TABLE DATA, BLOBS, BLOB COMMENTS */
|
|
SECTION_POST_DATA /* stuff to be processed after data */
|
|
} teSection;
|
|
|
|
typedef struct _restoreOptions
|
|
{
|
|
int createDB; /* Issue commands to create the database */
|
|
int noOwner; /* Don't try to match original object owner */
|
|
int noTablespace; /* Don't issue tablespace-related commands */
|
|
int disable_triggers; /* disable triggers during data-only
|
|
* restore */
|
|
int use_setsessauth;/* Use SET SESSION AUTHORIZATION commands
|
|
* instead of OWNER TO */
|
|
char *superuser; /* Username to use as superuser */
|
|
char *use_role; /* Issue SET ROLE to this */
|
|
int dropSchema;
|
|
int disable_dollar_quoting;
|
|
int dump_inserts;
|
|
int column_inserts;
|
|
int if_exists;
|
|
int no_security_labels; /* Skip security label entries */
|
|
int strict_names;
|
|
|
|
const char *filename;
|
|
int dataOnly;
|
|
int schemaOnly;
|
|
int dumpSections;
|
|
int verbose;
|
|
int aclsSkip;
|
|
const char *lockWaitTimeout;
|
|
int include_everything;
|
|
|
|
int tocSummary;
|
|
char *tocFile;
|
|
int format;
|
|
char *formatName;
|
|
|
|
int selTypes;
|
|
int selIndex;
|
|
int selFunction;
|
|
int selTrigger;
|
|
int selTable;
|
|
SimpleStringList indexNames;
|
|
SimpleStringList functionNames;
|
|
SimpleStringList schemaNames;
|
|
SimpleStringList schemaExcludeNames;
|
|
SimpleStringList triggerNames;
|
|
SimpleStringList tableNames;
|
|
|
|
int useDB;
|
|
char *dbname; /* subject to expand_dbname */
|
|
char *pgport;
|
|
char *pghost;
|
|
char *username;
|
|
int noDataForFailedTables;
|
|
trivalue promptPassword;
|
|
int exit_on_error;
|
|
int compression;
|
|
int suppressDumpWarnings; /* Suppress output of WARNING entries
|
|
* to stderr */
|
|
bool single_txn;
|
|
|
|
bool *idWanted; /* array showing which dump IDs to emit */
|
|
int enable_row_security;
|
|
} RestoreOptions;
|
|
|
|
typedef struct _dumpOptions
|
|
{
|
|
const char *dbname; /* subject to expand_dbname */
|
|
const char *pghost;
|
|
const char *pgport;
|
|
const char *username;
|
|
bool oids;
|
|
|
|
int binary_upgrade;
|
|
|
|
/* various user-settable parameters */
|
|
bool schemaOnly;
|
|
bool dataOnly;
|
|
int dumpSections; /* bitmask of chosen sections */
|
|
bool aclsSkip;
|
|
const char *lockWaitTimeout;
|
|
|
|
/* flags for various command-line long options */
|
|
int disable_dollar_quoting;
|
|
int dump_inserts;
|
|
int column_inserts;
|
|
int if_exists;
|
|
int no_security_labels;
|
|
int no_synchronized_snapshots;
|
|
int no_unlogged_table_data;
|
|
int serializable_deferrable;
|
|
int quote_all_identifiers;
|
|
int disable_triggers;
|
|
int outputNoTablespaces;
|
|
int use_setsessauth;
|
|
int enable_row_security;
|
|
|
|
/* default, if no "inclusion" switches appear, is to dump everything */
|
|
bool include_everything;
|
|
|
|
int outputClean;
|
|
int outputCreateDB;
|
|
bool outputBlobs;
|
|
int outputNoOwner;
|
|
char *outputSuperuser;
|
|
} DumpOptions;
|
|
|
|
/*
|
|
* We may want to have some more user-readable data, but in the mean
|
|
* time this gives us some abstraction and type checking.
|
|
*/
|
|
typedef struct Archive
|
|
{
|
|
DumpOptions *dopt; /* options, if dumping */
|
|
RestoreOptions *ropt; /* options, if restoring */
|
|
|
|
int verbose;
|
|
char *remoteVersionStr; /* server's version string */
|
|
int remoteVersion; /* same in numeric form */
|
|
bool isStandby; /* is server a standby node */
|
|
|
|
int minRemoteVersion; /* allowable range */
|
|
int maxRemoteVersion;
|
|
|
|
int numWorkers; /* number of parallel processes */
|
|
char *sync_snapshot_id; /* sync snapshot id for parallel
|
|
* operation */
|
|
|
|
/* info needed for string escaping */
|
|
int encoding; /* libpq code for client_encoding */
|
|
bool std_strings; /* standard_conforming_strings */
|
|
char *use_role; /* Issue SET ROLE to this */
|
|
|
|
/* error handling */
|
|
bool exit_on_error; /* whether to exit on SQL errors... */
|
|
int n_errors; /* number of errors (if no die) */
|
|
|
|
/* The rest is private */
|
|
} Archive;
|
|
|
|
|
|
/*
|
|
* pg_dump uses two different mechanisms for identifying database objects:
|
|
*
|
|
* CatalogId represents an object by the tableoid and oid of its defining
|
|
* entry in the system catalogs. We need this to interpret pg_depend entries,
|
|
* for instance.
|
|
*
|
|
* DumpId is a simple sequential integer counter assigned as dumpable objects
|
|
* are identified during a pg_dump run. We use DumpId internally in preference
|
|
* to CatalogId for two reasons: it's more compact, and we can assign DumpIds
|
|
* to "objects" that don't have a separate CatalogId. For example, it is
|
|
* convenient to consider a table, its data, and its ACL as three separate
|
|
* dumpable "objects" with distinct DumpIds --- this lets us reason about the
|
|
* order in which to dump these things.
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
Oid tableoid;
|
|
Oid oid;
|
|
} CatalogId;
|
|
|
|
typedef int DumpId;
|
|
|
|
typedef int (*DataDumperPtr) (Archive *AH, void *userArg);
|
|
|
|
typedef void (*SetupWorkerPtr) (Archive *AH);
|
|
|
|
/*
|
|
* Main archiver interface.
|
|
*/
|
|
|
|
extern void ConnectDatabase(Archive *AH,
|
|
const char *dbname,
|
|
const char *pghost,
|
|
const char *pgport,
|
|
const char *username,
|
|
trivalue prompt_password);
|
|
extern void DisconnectDatabase(Archive *AHX);
|
|
extern PGconn *GetConnection(Archive *AHX);
|
|
|
|
/* Called to add a TOC entry */
|
|
extern void ArchiveEntry(Archive *AHX,
|
|
CatalogId catalogId, DumpId dumpId,
|
|
const char *tag,
|
|
const char *namespace, const char *tablespace,
|
|
const char *owner, bool withOids,
|
|
const char *desc, teSection section,
|
|
const char *defn,
|
|
const char *dropStmt, const char *copyStmt,
|
|
const DumpId *deps, int nDeps,
|
|
DataDumperPtr dumpFn, void *dumpArg);
|
|
|
|
/* Called to write *data* to the archive */
|
|
extern void WriteData(Archive *AH, const void *data, size_t dLen);
|
|
|
|
extern int StartBlob(Archive *AH, Oid oid);
|
|
extern int EndBlob(Archive *AH, Oid oid);
|
|
|
|
extern void CloseArchive(Archive *AH);
|
|
|
|
extern void SetArchiveOptions(Archive *AH, DumpOptions *dopt, RestoreOptions *ropt);
|
|
|
|
extern void ProcessArchiveRestoreOptions(Archive *AH);
|
|
|
|
extern void RestoreArchive(Archive *AH);
|
|
|
|
/* Open an existing archive */
|
|
extern Archive *OpenArchive(const char *FileSpec, const ArchiveFormat fmt);
|
|
|
|
/* Create a new archive */
|
|
extern Archive *CreateArchive(const char *FileSpec, const ArchiveFormat fmt,
|
|
const int compression, ArchiveMode mode,
|
|
SetupWorkerPtr setupDumpWorker);
|
|
|
|
/* The --list option */
|
|
extern void PrintTOCSummary(Archive *AH);
|
|
|
|
extern RestoreOptions *NewRestoreOptions(void);
|
|
|
|
extern DumpOptions *NewDumpOptions(void);
|
|
extern void InitDumpOptions(DumpOptions *opts);
|
|
extern DumpOptions *dumpOptionsFromRestoreOptions(RestoreOptions *ropt);
|
|
|
|
/* Rearrange and filter TOC entries */
|
|
extern void SortTocFromFile(Archive *AHX);
|
|
|
|
/* Convenience functions used only when writing DATA */
|
|
extern void archputs(const char *s, Archive *AH);
|
|
extern int archprintf(Archive *AH, const char *fmt,...) pg_attribute_printf(2, 3);
|
|
|
|
#define appendStringLiteralAH(buf,str,AH) \
|
|
appendStringLiteral(buf, str, (AH)->encoding, (AH)->std_strings)
|
|
|
|
#endif /* PG_BACKUP_H */
|