From 34c978442c55dd13a3a8c6b90fd4380dad02f3da Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Sat, 3 Mar 2012 16:39:26 -0500
Subject: [PATCH] Provide environment overrides for psql file locations.

PSQL_HISTORY provides an alternative for the command history file,
and PSQLRC provides an alternative location for the .psqlrc file.
---
 doc/src/sgml/ref/psql-ref.sgml | 30 ++++++++++++++++++++++++++++++
 src/bin/psql/input.c           |  9 +++++++++
 src/bin/psql/startup.c         | 10 +++++++++-
 3 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 55aa5f2ac1d..fdeaea60404 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -3340,6 +3340,26 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
     </listitem>
    </varlistentry>
 
+   <varlistentry>
+    <term><envar>PSQL_HISTORY</envar></term>
+
+    <listitem>
+     <para>
+      Alternative location for the command history file. Tilde ("~") expansion is performed.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><envar>PSQLRC</envar></term>
+
+    <listitem>
+     <para>
+      Alternative location of the user's .psqlrc file. Tilde ("~") expansion is performed.
+     </para>
+    </listitem>
+   </varlistentry>
+
    <varlistentry>
     <term><envar>SHELL</envar></term>
 
@@ -3390,6 +3410,11 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
      to set up the client or the server to taste (using the <command>\set
      </command> and <command>SET</command> commands).
     </para>
+    <para>
+     The location of the user's <filename>~/.psqlrc</filename> file can
+     also be set explicitly via the <envar>PSQLRC</envar> environment
+     setting.
+    </para>
    </listitem>
 
    <listitem>
@@ -3411,6 +3436,11 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
      <filename>~/.psql_history</filename>, or
      <filename>%APPDATA%\postgresql\psql_history</filename> on Windows.
     </para>
+    <para>
+     The location of the history file can
+     also be set explicitly via the <envar>PSQL_HISTORY</envar> environment
+     setting.
+    </para>
    </listitem>
   </itemizedlist>
  </refsect1>
diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c
index d77a731c2ec..880e7e6511d 100644
--- a/src/bin/psql/input.c
+++ b/src/bin/psql/input.c
@@ -285,6 +285,15 @@ initializeInput(int flags)
 		history_lines_added = 0;
 
 		histfile = GetVariable(pset.vars, "HISTFILE");
+
+		if (histfile == NULL)
+		{
+			char * envhist;
+			envhist = getenv("PSQL_HISTORY");
+			if (envhist != NULL && strlen(envhist) > 0)
+				histfile = envhist;
+		}
+
 		if (histfile == NULL)
 		{
 			if (get_home_path(home))
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 166c227d6b6..b5664dfd1d3 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -591,6 +591,7 @@ process_psqlrc(char *argv0)
 	char		rc_file[MAXPGPATH];
 	char		my_exec_path[MAXPGPATH];
 	char		etc_path[MAXPGPATH];
+	char       *envrc;
 
 	find_my_exec(argv0, my_exec_path);
 	get_etc_path(my_exec_path, etc_path);
@@ -598,7 +599,14 @@ process_psqlrc(char *argv0)
 	snprintf(rc_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
 	process_psqlrc_file(rc_file);
 
-	if (get_home_path(home))
+	envrc = getenv("PSQLRC");
+	
+	if (envrc != NULL && strlen(envrc) > 0)
+	{
+		expand_tilde(&envrc);
+		process_psqlrc_file(envrc);
+	}
+	else if (get_home_path(home))
 	{
 		snprintf(rc_file, MAXPGPATH, "%s/%s", home, PSQLRC);
 		process_psqlrc_file(rc_file);
-- 
GitLab