This has been saved for the 8.1 release:

        http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Andreas Seltenreich wrote:
> Hi,
> 
> the following patch makes the filename used to store the readline
> history customizable through a variable named HISTFILE, analogous to
> psql's already implemented HISTCONTROL and HISTSIZE variables, and
> bash's HISTFILE-Variable.
> 
> The motivation was to be able to get psql to maintain separate
> histories for separate databases.  This is now easily achievable
> through a line like the following in ~/.psqlrc:
> 
> \set HISTFILE ~/.psql_history- :DBNAME
> 
> regards,
> Andreas
> 

> Index: doc/src/sgml/ref/psql-ref.sgml
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v
> retrieving revision 1.123
> diff -c -r1.123 psql-ref.sgml
> *** doc/src/sgml/ref/psql-ref.sgml    6 Oct 2004 18:39:15 -0000       1.123
> --- doc/src/sgml/ref/psql-ref.sgml    26 Oct 2004 05:57:57 -0000
> ***************
> *** 1973,1978 ****
> --- 1973,2001 ----
>         </varlistentry>
>   
>         <varlistentry>
> +         <term><varname>HISTFILE</varname></term>
> +         <listitem>
> +         <para>
> +     This variable contains the filename used to save the history.
> +         Its default value is <filename>~/.psql_history</filename>.
> +         When unset or empty, the command history is not saved upon
> +         program termination.  For example, 
> + <programlisting>
> + \set HISTFILE ~/.psql_history- :DBNAME
> + </programlisting>
> +         in your <filename>~/.psqlrc</filename> will get psql to
> +         maintain a separate history for each database.
> +         </para>
> +         <note>
> +         <para>
> +         This feature was shamelessly plagiarized from
> +         <application>Bash</application>.
> +         </para>
> +         </note>
> +         </listitem>
> +       </varlistentry>
> + 
> +       <varlistentry>
>           <term><varname>HISTSIZE</varname></term>
>           <listitem>
>           <para>
> Index: src/bin/psql/input.c
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/src/bin/psql/input.c,v
> retrieving revision 1.41
> diff -c -r1.41 input.c
> *** src/bin/psql/input.c      12 Oct 2004 21:54:44 -0000      1.41
> --- src/bin/psql/input.c      26 Oct 2004 05:57:57 -0000
> ***************
> *** 38,46 ****
>   static void finishInput(int, void *);
>   #endif
>   
> - #define PSQLHISTORY ".psql_history"
> - 
> - 
>   #ifdef USE_READLINE
>   static enum histcontrol
>   GetHistControlConfig(void)
> --- 38,43 ----
> ***************
> *** 167,173 ****
>   #ifdef USE_READLINE
>       if (flags & 1)
>       {
> !             char            home[MAXPGPATH];
>   
>               useReadline = true;
>               initialize_readline();
> --- 164,171 ----
>   #ifdef USE_READLINE
>       if (flags & 1)
>       {
> !             const char *psql_history;
> !             char       *tilde_expanded;
>   
>               useReadline = true;
>               initialize_readline();
> ***************
> *** 176,191 ****
>               if (GetVariable(pset.vars, "HISTSIZE") == NULL)
>                       SetVariable(pset.vars, "HISTSIZE", "500");
>               using_history();
> -             if (get_home_path(home))
> -             {
> -                     char       *psql_history;
>   
> !                     psql_history = pg_malloc(strlen(home) + 1 +
> !                                                                      
> strlen(PSQLHISTORY) + 1);
> !                     sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
> !                     read_history(psql_history);
> !                     free(psql_history);
> !             }
>       }
>   #endif
>   
> --- 174,189 ----
>               if (GetVariable(pset.vars, "HISTSIZE") == NULL)
>                       SetVariable(pset.vars, "HISTSIZE", "500");
>               using_history();
>   
> !             if (GetVariable(pset.vars, "HISTFILE") == NULL)
> !                     SetVariable(pset.vars, "HISTFILE", "~/.psql_history");
> ! 
> !             psql_history = GetVariable(pset.vars, "HISTFILE");
> ! 
> !             tilde_expanded = pg_strdup(psql_history);
> !             expand_tilde(&tilde_expanded);
> !             read_history(tilde_expanded);
> !             free(tilde_expanded);
>       }
>   #endif
>   
> ***************
> *** 228,252 ****
>   #ifdef USE_READLINE
>       if (useHistory)
>       {
> !             char            home[MAXPGPATH];
> ! 
> !             if (get_home_path(home))
> !             {
> !                     char       *psql_history;
> !                     int                     hist_size;
>   
> !                     psql_history = pg_malloc(strlen(home) + 1 +
> !                                                                      
> strlen(PSQLHISTORY) + 1);
>   
> !                     hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, 
> -1, true);
>   
> !                     if (hist_size >= 0)
> !                             stifle_history(hist_size);
> ! 
> !                     sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
> !                     write_history(psql_history);
> !                     free(psql_history);
> !             }
>       }
>   #endif
>   }
> --- 226,251 ----
>   #ifdef USE_READLINE
>       if (useHistory)
>       {
> !             const char *psql_history;
> !             char       *tilde_expanded;
> !             int                     hist_size;
> !             
> !             psql_history = GetVariable(pset.vars, "HISTFILE");
> ! 
> !             if (!psql_history || !strlen(psql_history))
> !                     return;
> !                     
> !             tilde_expanded = pg_strdup(psql_history);
> !             expand_tilde(&tilde_expanded);
> !             
> !             hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
>   
> !             if (hist_size >= 0)
> !                     stifle_history(hist_size);
>   
> !             saveHistory(tilde_expanded);
>   
> !             free(tilde_expanded);
>       }
>   #endif
>   }

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to