> please, append session_timezone to your list Here's a v2 patch which also includes session_timezone.
Separately, is this the kind of thing which is eligible for backporting into the next releases of 9.6 and 10? On Thu, Nov 16, 2017 at 10:27 PM, Pavel Stehule <pavel.steh...@gmail.com> wrote: > Hi > > 2017-11-16 23:59 GMT+01:00 Brian Cloutier <br...@citusdata.com>: > >> Hello hackers, >> >> I'm porting Citus to Windows and found that we use some variables which >> PG doesn't export; here is a patch which adds PGDLLIMPORT declarations to >> those variables. This is unfortunately required on Windows for extensions >> to be able to use those variables, and appears to already have been done to >> quite a few other variables. >> > > please, append session_timezone to your list > > Regards > > Pavel > >
From 872408266fdc9782c6b4c6f3396423b16b86e149 Mon Sep 17 00:00:00 2001 From: Brian Cloutier <git...@briancloutier.com> Date: Tue, 31 Oct 2017 17:53:42 -0700 Subject: [PATCH] Add PGDLLIMPORT declarations to some variables On Windows, PGDLLIMPORT is required for variables to be exported, for those variables to be importable by extensions. Add PGDLLIMPORT to some variables which extensions might want to use. MSDN documentation: https://docs.microsoft.com/en-us/cpp/build/exporting-from-a-dll-using-declspec-dllexport --- src/include/access/twophase.h | 2 +- src/include/commands/extension.h | 2 +- src/include/miscadmin.h | 10 +++++----- src/include/pgtime.h | 2 +- src/include/postmaster/postmaster.h | 4 ++-- src/include/storage/fd.h | 2 +- src/include/storage/proc.h | 4 ++-- src/include/tcop/dest.h | 2 +- src/include/tcop/tcopprot.h | 2 +- src/include/utils/guc.h | 6 +++--- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/include/access/twophase.h b/src/include/access/twophase.h index 54dec4e..f5fbbea 100644 --- a/src/include/access/twophase.h +++ b/src/include/access/twophase.h @@ -25,7 +25,7 @@ typedef struct GlobalTransactionData *GlobalTransaction; /* GUC variable */ -extern int max_prepared_xacts; +extern PGDLLIMPORT int max_prepared_xacts; extern Size TwoPhaseShmemSize(void); extern void TwoPhaseShmemInit(void); diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h index 73bba3c..551cf2b 100644 --- a/src/include/commands/extension.h +++ b/src/include/commands/extension.h @@ -28,7 +28,7 @@ * them from the extension first. */ extern PGDLLIMPORT bool creating_extension; -extern Oid CurrentExtensionObject; +extern PGDLLIMPORT Oid CurrentExtensionObject; extern ObjectAddress CreateExtension(ParseState *pstate, CreateExtensionStmt *stmt); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index dad98de..1877769 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -150,14 +150,14 @@ extern PGDLLIMPORT bool IsUnderPostmaster; extern PGDLLIMPORT bool IsBackgroundWorker; extern PGDLLIMPORT bool IsBinaryUpgrade; -extern bool ExitOnAnyError; +extern PGDLLIMPORT bool ExitOnAnyError; extern PGDLLIMPORT char *DataDir; extern PGDLLIMPORT int NBuffers; -extern int MaxBackends; -extern int MaxConnections; -extern int max_worker_processes; +extern PGDLLIMPORT int MaxBackends; +extern PGDLLIMPORT int MaxConnections; +extern PGDLLIMPORT int max_worker_processes; extern int max_parallel_workers; extern PGDLLIMPORT int MyProcPid; @@ -238,7 +238,7 @@ extern PGDLLIMPORT int IntervalStyle; #define MAXTZLEN 10 /* max TZ name len, not counting tr. null */ extern bool enableFsync; -extern bool allowSystemTableMods; +extern PGDLLIMPORT bool allowSystemTableMods; extern PGDLLIMPORT int work_mem; extern PGDLLIMPORT int maintenance_work_mem; extern PGDLLIMPORT int replacement_sort_tuples; diff --git a/src/include/pgtime.h b/src/include/pgtime.h index 4fd8f75..8a13d71 100644 --- a/src/include/pgtime.h +++ b/src/include/pgtime.h @@ -70,7 +70,7 @@ extern size_t pg_strftime(char *s, size_t max, const char *format, /* these functions and variables are in pgtz.c */ -extern pg_tz *session_timezone; +extern PGDLLIMPORT pg_tz *session_timezone; extern pg_tz *log_timezone; extern void pg_timezone_initialize(void); diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h index 0f85908..5925160 100644 --- a/src/include/postmaster/postmaster.h +++ b/src/include/postmaster/postmaster.h @@ -16,7 +16,7 @@ /* GUC options */ extern bool EnableSSL; extern int ReservedBackends; -extern int PostPortNumber; +extern PGDLLIMPORT int PostPortNumber; extern int Unix_socket_permissions; extern char *Unix_socket_group; extern char *Unix_socket_directories; @@ -44,7 +44,7 @@ extern int postmaster_alive_fds[2]; #define POSTMASTER_FD_OWN 1 /* kept open by postmaster only */ #endif -extern const char *progname; +extern PGDLLIMPORT const char *progname; extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn(); extern void ClosePostmasterPorts(bool am_syslogger); diff --git a/src/include/storage/fd.h b/src/include/storage/fd.h index faef39e..ea2ab8f 100644 --- a/src/include/storage/fd.h +++ b/src/include/storage/fd.h @@ -52,7 +52,7 @@ typedef int File; /* GUC parameter */ -extern int max_files_per_process; +extern PGDLLIMPORT int max_files_per_process; /* * This is private to fd.c, but exported for save/restore_backend_variables() diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h index 7dbaa81..2e59821 100644 --- a/src/include/storage/proc.h +++ b/src/include/storage/proc.h @@ -255,7 +255,7 @@ typedef struct PROC_HDR int startupBufferPinWaitBufId; } PROC_HDR; -extern PROC_HDR *ProcGlobal; +extern PGDLLIMPORT PROC_HDR *ProcGlobal; extern PGPROC *PreparedXactProcs; @@ -273,7 +273,7 @@ extern PGPROC *PreparedXactProcs; #define NUM_AUXILIARY_PROCS 4 /* configurable options */ -extern int DeadlockTimeout; +extern PGDLLIMPORT int DeadlockTimeout; extern int StatementTimeout; extern int LockTimeout; extern int IdleInTransactionSessionTimeout; diff --git a/src/include/tcop/dest.h b/src/include/tcop/dest.h index c990544..6de5812 100644 --- a/src/include/tcop/dest.h +++ b/src/include/tcop/dest.h @@ -129,7 +129,7 @@ struct _DestReceiver /* Private fields might appear beyond this point... */ }; -extern DestReceiver *None_Receiver; /* permanent receiver for DestNone */ +extern PGDLLIMPORT DestReceiver *None_Receiver; /* permanent receiver for DestNone */ /* The primary destination management functions */ diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h index f8c535c..baaf45e 100644 --- a/src/include/tcop/tcopprot.h +++ b/src/include/tcop/tcopprot.h @@ -45,7 +45,7 @@ typedef enum LOGSTMT_ALL /* log all statements */ } LogStmtLevel; -extern int log_statement; +extern PGDLLIMPORT int log_statement; extern List *pg_parse_query(const char *query_string); extern List *pg_analyze_and_rewrite(RawStmt *parsetree, diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index c1870d2..72134ae 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -246,8 +246,8 @@ extern PGDLLIMPORT bool check_function_bodies; extern bool default_with_oids; extern int log_min_error_statement; -extern int log_min_messages; -extern int client_min_messages; +extern PGDLLIMPORT int log_min_messages; +extern PGDLLIMPORT int client_min_messages; extern int log_min_duration_statement; extern int log_temp_files; @@ -256,7 +256,7 @@ extern int temp_file_limit; extern int num_temp_buffers; extern char *cluster_name; -extern char *ConfigFileName; +extern PGDLLIMPORT char *ConfigFileName; extern char *HbaFileName; extern char *IdentFileName; extern char *external_pid_file; -- 2.7.4