Commit 52766871 authored by Heikki Linnakangas's avatar Heikki Linnakangas

Make xlog_internal.h includable in frontend context.

This makes unnecessary the ugly hack used to #include postgres.h in
pg_basebackup.

Based on Alvaro Herrera's patch
parent 6264cd3d
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
*/ */
#include "postgres.h" #include "postgres.h"
#include "access/xlog.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "catalog/pg_control.h" #include "catalog/pg_control.h"
#include "utils/guc.h" #include "utils/guc.h"
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
#include "access/xlog.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "postmaster/startup.h" #include "postmaster/startup.h"
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "access/htup_details.h" #include "access/htup_details.h"
#include "access/xlog.h" #include "access/xlog.h"
#include "access/xlog_fn.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "access/xlogutils.h" #include "access/xlogutils.h"
#include "catalog/catalog.h" #include "catalog/catalog.h"
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include "access/xlog.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "libpq/pqsignal.h" #include "libpq/pqsignal.h"
#include "miscadmin.h" #include "miscadmin.h"
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include "access/xlog.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "libpq/pqsignal.h" #include "libpq/pqsignal.h"
#include "miscadmin.h" #include "miscadmin.h"
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
#include "access/xlog.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "libpq/pqsignal.h" #include "libpq/pqsignal.h"
#include "miscadmin.h" #include "miscadmin.h"
......
...@@ -11,13 +11,7 @@ ...@@ -11,13 +11,7 @@
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
/* #include "postgres_fe.h"
* We have to use postgres.h not postgres_fe.h here, because there's so much
* backend-only stuff in the XLOG include files we need. But we need a
* frontend-ish environment otherwise. Hence this ugly hack.
*/
#define FRONTEND 1
#include "postgres.h"
#include "libpq-fe.h" #include "libpq-fe.h"
#include <unistd.h> #include <unistd.h>
......
...@@ -12,13 +12,7 @@ ...@@ -12,13 +12,7 @@
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
/* #include "postgres_fe.h"
* We have to use postgres.h not postgres_fe.h here, because there's so much
* backend-only stuff in the XLOG include files we need. But we need a
* frontend-ish environment otherwise. Hence this ugly hack.
*/
#define FRONTEND 1
#include "postgres.h"
#include "libpq-fe.h" #include "libpq-fe.h"
#include "libpq/pqsignal.h" #include "libpq/pqsignal.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
......
...@@ -11,14 +11,7 @@ ...@@ -11,14 +11,7 @@
* src/bin/pg_basebackup/receivelog.c * src/bin/pg_basebackup/receivelog.c
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
#include "postgres_fe.h"
/*
* We have to use postgres.h not postgres_fe.h here, because there's so much
* backend-only stuff in the XLOG include files we need. But we need a
* frontend-ish environment otherwise. Hence this ugly hack.
*/
#define FRONTEND 1
#include "postgres.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h> #include <sys/time.h>
...@@ -30,8 +23,6 @@ ...@@ -30,8 +23,6 @@
#include "libpq-fe.h" #include "libpq-fe.h"
#include "access/xlog_internal.h" #include "access/xlog_internal.h"
#include "utils/datetime.h"
#include "utils/timestamp.h"
#include "receivelog.h" #include "receivelog.h"
#include "streamutil.h" #include "streamutil.h"
......
...@@ -11,13 +11,7 @@ ...@@ -11,13 +11,7 @@
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
/* #include "postgres_fe.h"
* We have to use postgres.h not postgres_fe.h here, because there's so much
* backend-only stuff in the XLOG include files we need. But we need a
* frontend-ish environment otherwise. Hence this ugly hack.
*/
#define FRONTEND 1
#include "postgres.h"
#include "streamutil.h" #include "streamutil.h"
#include <stdio.h> #include <stdio.h>
......
/*
* xlog_fn.h
*
* PostgreSQL transaction log SQL-callable function declarations
*
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* src/include/access/xlog_fn.h
*/
#ifndef XLOG_FN_H
#define XLOG_FN_H
#include "fmgr.h"
extern Datum pg_start_backup(PG_FUNCTION_ARGS);
extern Datum pg_stop_backup(PG_FUNCTION_ARGS);
extern Datum pg_switch_xlog(PG_FUNCTION_ARGS);
extern Datum pg_create_restore_point(PG_FUNCTION_ARGS);
extern Datum pg_current_xlog_location(PG_FUNCTION_ARGS);
extern Datum pg_current_xlog_insert_location(PG_FUNCTION_ARGS);
extern Datum pg_last_xlog_receive_location(PG_FUNCTION_ARGS);
extern Datum pg_last_xlog_replay_location(PG_FUNCTION_ARGS);
extern Datum pg_last_xact_replay_timestamp(PG_FUNCTION_ARGS);
extern Datum pg_xlogfile_name_offset(PG_FUNCTION_ARGS);
extern Datum pg_xlogfile_name(PG_FUNCTION_ARGS);
extern Datum pg_is_in_recovery(PG_FUNCTION_ARGS);
extern Datum pg_xlog_replay_pause(PG_FUNCTION_ARGS);
extern Datum pg_xlog_replay_resume(PG_FUNCTION_ARGS);
extern Datum pg_is_xlog_replay_paused(PG_FUNCTION_ARGS);
extern Datum pg_xlog_location_diff(PG_FUNCTION_ARGS);
extern Datum pg_is_in_backup(PG_FUNCTION_ARGS);
extern Datum pg_backup_start_time(PG_FUNCTION_ARGS);
#endif /* XLOG_FN_H */
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
* needed by rmgr routines (redo support for individual record types). * needed by rmgr routines (redo support for individual record types).
* So the XLogRecord typedef and associated stuff appear in xlog.h. * So the XLogRecord typedef and associated stuff appear in xlog.h.
* *
* Note: This file must be includable in both frontend and backend contexts,
* to allow stand-alone tools like pg_receivexlog to deal with WAL files.
*
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
...@@ -16,8 +19,9 @@ ...@@ -16,8 +19,9 @@
#ifndef XLOG_INTERNAL_H #ifndef XLOG_INTERNAL_H
#define XLOG_INTERNAL_H #define XLOG_INTERNAL_H
#include "access/xlog.h" #include "access/xlogdefs.h"
#include "fmgr.h" #include "datatype/timestamp.h"
#include "lib/stringinfo.h"
#include "pgtime.h" #include "pgtime.h"
#include "storage/block.h" #include "storage/block.h"
#include "storage/relfilenode.h" #include "storage/relfilenode.h"
...@@ -225,6 +229,12 @@ typedef struct xl_restore_point ...@@ -225,6 +229,12 @@ typedef struct xl_restore_point
} xl_restore_point; } xl_restore_point;
/*
* XLogRecord is defined in xlog.h, but we avoid #including that to keep
* this file includable in stand-alone programs.
*/
struct XLogRecord;
/* /*
* Method table for resource managers. * Method table for resource managers.
* *
...@@ -233,7 +243,7 @@ typedef struct xl_restore_point ...@@ -233,7 +243,7 @@ typedef struct xl_restore_point
typedef struct RmgrData typedef struct RmgrData
{ {
const char *rm_name; const char *rm_name;
void (*rm_redo) (XLogRecPtr lsn, XLogRecord *rptr); void (*rm_redo) (XLogRecPtr lsn, struct XLogRecord *rptr);
void (*rm_desc) (StringInfo buf, uint8 xl_info, char *rec); void (*rm_desc) (StringInfo buf, uint8 xl_info, char *rec);
void (*rm_startup) (void); void (*rm_startup) (void);
void (*rm_cleanup) (void); void (*rm_cleanup) (void);
...@@ -272,26 +282,4 @@ extern bool XLogArchiveCheckDone(const char *xlog); ...@@ -272,26 +282,4 @@ extern bool XLogArchiveCheckDone(const char *xlog);
extern bool XLogArchiveIsBusy(const char *xlog); extern bool XLogArchiveIsBusy(const char *xlog);
extern void XLogArchiveCleanup(const char *xlog); extern void XLogArchiveCleanup(const char *xlog);
/*
* These aren't in xlog.h because I'd rather not include fmgr.h there.
*/
extern Datum pg_start_backup(PG_FUNCTION_ARGS);
extern Datum pg_stop_backup(PG_FUNCTION_ARGS);
extern Datum pg_switch_xlog(PG_FUNCTION_ARGS);
extern Datum pg_create_restore_point(PG_FUNCTION_ARGS);
extern Datum pg_current_xlog_location(PG_FUNCTION_ARGS);
extern Datum pg_current_xlog_insert_location(PG_FUNCTION_ARGS);
extern Datum pg_last_xlog_receive_location(PG_FUNCTION_ARGS);
extern Datum pg_last_xlog_replay_location(PG_FUNCTION_ARGS);
extern Datum pg_last_xact_replay_timestamp(PG_FUNCTION_ARGS);
extern Datum pg_xlogfile_name_offset(PG_FUNCTION_ARGS);
extern Datum pg_xlogfile_name(PG_FUNCTION_ARGS);
extern Datum pg_is_in_recovery(PG_FUNCTION_ARGS);
extern Datum pg_xlog_replay_pause(PG_FUNCTION_ARGS);
extern Datum pg_xlog_replay_resume(PG_FUNCTION_ARGS);
extern Datum pg_is_xlog_replay_paused(PG_FUNCTION_ARGS);
extern Datum pg_xlog_location_diff(PG_FUNCTION_ARGS);
extern Datum pg_is_in_backup(PG_FUNCTION_ARGS);
extern Datum pg_backup_start_time(PG_FUNCTION_ARGS);
#endif /* XLOG_INTERNAL_H */ #endif /* XLOG_INTERNAL_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment