*** a/doc/src/sgml/ref/psql-ref.sgml
--- b/doc/src/sgml/ref/psql-ref.sgml
***************
*** 3300,3305 **** PSQL_EDITOR_LINENUMBER_ARG='--line '
--- 3300,3325 ----
     </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>
  
      <listitem>
***************
*** 3349,3354 **** PSQL_EDITOR_LINENUMBER_ARG='--line '
--- 3369,3379 ----
       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>
***************
*** 3370,3375 **** PSQL_EDITOR_LINENUMBER_ARG='--line '
--- 3395,3405 ----
       <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>
*** a/src/bin/psql/input.c
--- b/src/bin/psql/input.c
***************
*** 285,290 **** initializeInput(int flags)
--- 285,299 ----
  		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))
*** a/src/bin/psql/startup.c
--- b/src/bin/psql/startup.c
***************
*** 575,580 **** process_psqlrc(char *argv0)
--- 575,581 ----
  	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);
***************
*** 582,588 **** process_psqlrc(char *argv0)
  	snprintf(rc_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
  	process_psqlrc_file(rc_file);
  
! 	if (get_home_path(home))
  	{
  		snprintf(rc_file, MAXPGPATH, "%s/%s", home, PSQLRC);
  		process_psqlrc_file(rc_file);
--- 583,596 ----
  	snprintf(rc_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
  	process_psqlrc_file(rc_file);
  
! 	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);
