PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pg_backup_db.h File Reference
#include "pg_backup.h"
Include dependency graph for pg_backup_db.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int ExecuteSqlCommandBuf (Archive *AHX, const char *buf, size_t bufLen)
 
void ExecuteSqlStatement (Archive *AHX, const char *query)
 
PGresultExecuteSqlQuery (Archive *AHX, const char *query, ExecStatusType status)
 
PGresultExecuteSqlQueryForSingleRow (Archive *fout, const char *query)
 
void EndDBCopyMode (Archive *AHX, const char *tocEntryTag)
 
void StartTransaction (Archive *AHX)
 
void CommitTransaction (Archive *AHX)
 

Function Documentation

◆ CommitTransaction()

void CommitTransaction ( Archive AHX)

Definition at line 476 of file pg_backup_db.c.

477{
478 ArchiveHandle *AH = (ArchiveHandle *) AHX;
479
480 ExecuteSqlCommand(AH, "COMMIT", "could not commit database transaction");
481}
static void ExecuteSqlCommand(ArchiveHandle *AH, const char *qry, const char *desc)
Definition: pg_backup_db.c:267

References ExecuteSqlCommand().

Referenced by IssueCommandPerBlob().

◆ EndDBCopyMode()

void EndDBCopyMode ( Archive AHX,
const char *  tocEntryTag 
)

Definition at line 439 of file pg_backup_db.c.

440{
441 ArchiveHandle *AH = (ArchiveHandle *) AHX;
442
443 if (AH->pgCopyIn)
444 {
445 PGresult *res;
446
447 if (PQputCopyEnd(AH->connection, NULL) <= 0)
448 pg_fatal("error returned by PQputCopyEnd: %s",
450
451 /* Check command status and return to normal libpq state */
452 res = PQgetResult(AH->connection);
454 warn_or_exit_horribly(AH, "COPY failed for table \"%s\": %s",
455 tocEntryTag, PQerrorMessage(AH->connection));
456 PQclear(res);
457
458 /* Do this to ensure we've pumped libpq back to idle state */
459 if (PQgetResult(AH->connection) != NULL)
460 pg_log_warning("unexpected extra results during COPY of table \"%s\"",
461 tocEntryTag);
462
463 AH->pgCopyIn = false;
464 }
465}
char * PQerrorMessage(const PGconn *conn)
Definition: fe-connect.c:7625
PGresult * PQgetResult(PGconn *conn)
Definition: fe-exec.c:2062
ExecStatusType PQresultStatus(const PGresult *res)
Definition: fe-exec.c:3411
void PQclear(PGresult *res)
Definition: fe-exec.c:721
int PQputCopyEnd(PGconn *conn, const char *errormsg)
Definition: fe-exec.c:2749
@ PGRES_COMMAND_OK
Definition: libpq-fe.h:125
void warn_or_exit_horribly(ArchiveHandle *AH, const char *fmt,...)
#define pg_fatal(...)
#define pg_log_warning(...)
Definition: pgfnames.c:24

References _archiveHandle::connection, pg_fatal, pg_log_warning, _archiveHandle::pgCopyIn, PGRES_COMMAND_OK, PQclear(), PQerrorMessage(), PQgetResult(), PQputCopyEnd(), PQresultStatus(), and warn_or_exit_horribly().

Referenced by restore_toc_entry().

◆ ExecuteSqlCommandBuf()

int ExecuteSqlCommandBuf ( Archive AHX,
const char *  buf,
size_t  bufLen 
)

Definition at line 384 of file pg_backup_db.c.

385{
386 ArchiveHandle *AH = (ArchiveHandle *) AHX;
387
388 if (AH->outputKind == OUTPUT_COPYDATA)
389 {
390 /*
391 * COPY data.
392 *
393 * We drop the data on the floor if libpq has failed to enter COPY
394 * mode; this allows us to behave reasonably when trying to continue
395 * after an error in a COPY command.
396 */
397 if (AH->pgCopyIn &&
398 PQputCopyData(AH->connection, buf, bufLen) <= 0)
399 pg_fatal("error returned by PQputCopyData: %s",
401 }
402 else if (AH->outputKind == OUTPUT_OTHERDATA)
403 {
404 /*
405 * Table data expressed as INSERT commands; or, in old dump files,
406 * BLOB COMMENTS data (which is expressed as COMMENT ON commands).
407 */
408 ExecuteSimpleCommands(AH, buf, bufLen);
409 }
410 else
411 {
412 /*
413 * General SQL commands; we assume that commands will not be split
414 * across calls.
415 *
416 * In most cases the data passed to us will be a null-terminated
417 * string, but if it's not, we have to add a trailing null.
418 */
419 if (buf[bufLen] == '\0')
420 ExecuteSqlCommand(AH, buf, "could not execute query");
421 else
422 {
423 char *str = (char *) pg_malloc(bufLen + 1);
424
425 memcpy(str, buf, bufLen);
426 str[bufLen] = '\0';
427 ExecuteSqlCommand(AH, str, "could not execute query");
428 free(str);
429 }
430 }
431
432 return bufLen;
433}
int PQputCopyData(PGconn *conn, const char *buffer, int nbytes)
Definition: fe-exec.c:2695
void * pg_malloc(size_t size)
Definition: fe_memutils.c:47
const char * str
#define free(a)
Definition: header.h:65
@ OUTPUT_COPYDATA
@ OUTPUT_OTHERDATA
static void ExecuteSimpleCommands(ArchiveHandle *AH, const char *buf, size_t bufLen)
Definition: pg_backup_db.c:319
static char * buf
Definition: pg_test_fsync.c:72
ArchiverOutput outputKind

References buf, _archiveHandle::connection, ExecuteSimpleCommands(), ExecuteSqlCommand(), free, OUTPUT_COPYDATA, OUTPUT_OTHERDATA, _archiveHandle::outputKind, pg_fatal, pg_malloc(), _archiveHandle::pgCopyIn, PQerrorMessage(), PQputCopyData(), and str.

Referenced by ahwrite().

◆ ExecuteSqlQuery()

PGresult * ExecuteSqlQuery ( Archive AHX,
const char *  query,
ExecStatusType  status 
)

Definition at line 229 of file pg_backup_db.c.

230{
231 ArchiveHandle *AH = (ArchiveHandle *) AHX;
232 PGresult *res;
233
234 res = PQexec(AH->connection, query);
235 if (PQresultStatus(res) != status)
236 die_on_query_failure(AH, query);
237 return res;
238}
PGresult * PQexec(PGconn *conn, const char *query)
Definition: fe-exec.c:2262
static void die_on_query_failure(ArchiveHandle *AH, const char *query)
Definition: pg_backup_db.c:208

References _archiveHandle::connection, die_on_query_failure(), PQexec(), and PQresultStatus().

Referenced by append_depends_on_extension(), buildMatViewRefreshDependencies(), collectBinaryUpgradeClassOids(), collectComments(), collectRoleNames(), collectSecLabels(), collectSequences(), createViewAsClause(), dumpCompositeType(), dumpDatabase(), dumpDatabaseConfig(), dumpEnumType(), dumpOpclass(), dumpOpfamily(), dumpRule(), dumpSequence(), dumpSequenceData(), dumpTable(), dumpTableData_copy(), dumpTableData_insert(), dumpTSConfig(), dumpUserMappings(), ExecuteSqlQueryForSingleRow(), expand_extension_name_patterns(), expand_foreign_server_name_patterns(), expand_schema_name_patterns(), expand_table_name_patterns(), fetchAttributeStats(), getAccessMethods(), getAdditionalACLs(), getAggregates(), getCasts(), getCollations(), getConstraints(), getConversions(), getDefaultACLs(), getDependencies(), getDomainConstraints(), getEventTriggers(), getExtendedStatistics(), getExtensionMembership(), getExtensions(), getForeignDataWrappers(), getForeignServers(), getFuncs(), getIndexes(), getInherits(), getLOs(), getNamespaces(), getOpclasses(), getOperators(), getOpfamilies(), getPartitioningInfo(), getPolicies(), getProcLangs(), getPublicationNamespaces(), getPublications(), getPublicationTables(), getRules(), getSubscriptions(), getSubscriptionTables(), getTableAttrs(), getTables(), getTransforms(), getTriggers(), getTSConfigurations(), getTSDictionaries(), getTSParsers(), getTSTemplates(), getTypes(), processExtensionTables(), and set_restrict_relation_kind().

◆ ExecuteSqlQueryForSingleRow()

PGresult * ExecuteSqlQueryForSingleRow ( Archive fout,
const char *  query 
)

Definition at line 244 of file pg_backup_db.c.

245{
246 PGresult *res;
247 int ntups;
248
249 res = ExecuteSqlQuery(fout, query, PGRES_TUPLES_OK);
250
251 /* Expecting a single result only */
252 ntups = PQntuples(res);
253 if (ntups != 1)
254 pg_fatal(ngettext("query returned %d row instead of one: %s",
255 "query returned %d rows instead of one: %s",
256 ntups),
257 ntups, query);
258
259 return res;
260}
#define ngettext(s, p, n)
Definition: c.h:1152
int PQntuples(const PGresult *res)
Definition: fe-exec.c:3481
@ PGRES_TUPLES_OK
Definition: libpq-fe.h:128
PGresult * ExecuteSqlQuery(Archive *AHX, const char *query, ExecStatusType status)
Definition: pg_backup_db.c:229

References ExecuteSqlQuery(), ngettext, pg_fatal, PGRES_TUPLES_OK, and PQntuples().

Referenced by _check_database_version(), binary_upgrade_set_type_oids_by_type_oid(), ConnectDatabaseAhx(), convertTSFunction(), dumpAgg(), dumpBaseType(), dumpCollation(), dumpConversion(), dumpDatabase(), dumpDomain(), dumpForeignServer(), dumpFunc(), dumpOpclass(), dumpOpfamily(), dumpOpr(), dumpRangeType(), dumpSearchPath(), dumpStatisticsExt(), dumpTableAttach(), dumpTableSchema(), dumpTSConfig(), dumpTSDictionary(), expand_table_name_patterns(), get_language_name(), get_next_possible_free_pg_type_oid(), get_synchronized_snapshot(), getFormattedTypeName(), and setup_connection().

◆ ExecuteSqlStatement()

◆ StartTransaction()

void StartTransaction ( Archive AHX)

Definition at line 468 of file pg_backup_db.c.

469{
470 ArchiveHandle *AH = (ArchiveHandle *) AHX;
471
472 ExecuteSqlCommand(AH, "BEGIN", "could not start database transaction");
473}

References ExecuteSqlCommand().

Referenced by IssueCommandPerBlob().