<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.139 2005/06/09 15:27:26 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.140 2005/06/10 15:34:25 momjian Exp $
PostgreSQL documentation
-->
</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>.
+ For example, use:
+<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>
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.43 2005/01/06 18:29:09 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.44 2005/06/10 15:34:26 momjian Exp $
*/
#include "postgres_fe.h"
#ifdef USE_READLINE
static bool useReadline;
static bool useHistory;
+char *psql_history;
+
enum histcontrol
{
if (GetVariable(pset.vars, "HISTSIZE") == NULL)
SetVariable(pset.vars, "HISTSIZE", "500");
using_history();
- if (get_home_path(home))
+
+ if (GetVariable(pset.vars, "HISTFILE") == NULL)
+ {
+ if (get_home_path(home))
+ {
+ psql_history = pg_malloc(strlen(home) + 1 +
+ strlen(PSQLHISTORY) + 1);
+ snprintf(psql_history, MAXPGPATH, "%s/%s", home, PSQLHISTORY);
+ }
+ }
+ else
{
- char *psql_history;
+ psql_history = pg_strdup(GetVariable(pset.vars, "HISTFILE"));
+ expand_tilde(&psql_history);
+ }
- psql_history = pg_malloc(strlen(home) + 1 +
- strlen(PSQLHISTORY) + 1);
- sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
+ if (psql_history)
read_history(psql_history);
- free(psql_history);
- }
}
#endif
#endif
{
#ifdef USE_READLINE
- if (useHistory)
+ if (useHistory && psql_history)
{
- char home[MAXPGPATH];
+ int hist_size;
- if (get_home_path(home))
- {
- char *psql_history;
- int hist_size;
-
- hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
- if (hist_size >= 0)
- stifle_history(hist_size);
-
- psql_history = pg_malloc(strlen(home) + 1 +
- strlen(PSQLHISTORY) + 1);
- sprintf(psql_history, "%s/%s", home, PSQLHISTORY);
- write_history(psql_history);
- free(psql_history);
- }
+ hist_size = GetVariableNum(pset.vars, "HISTSIZE", -1, -1, true);
+ if (hist_size >= 0)
+ stifle_history(hist_size);
+
+ write_history(psql_history);
+ free(psql_history);
+ psql_history = NULL;
}
#endif
}