diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index ce936a0f98..3075d69575 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1,5 +1,5 @@
@@ -1429,6 +1429,24 @@ lo_import 152801
+
+ \prompt [ text ] name
+
+
+ Prompts the user to set variable name>. An optional prompt, text>, can be specified. (For multi-word
+ prompts, use single-quotes.)
+
+
+
+ By default, \prompt> uses the terminal for input and
+ output. However, if the
+
+
+
\pset parameter [ value ]
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index c25a5e6f0f..bcaf684a8e 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2007, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.177 2007/01/05 22:19:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.178 2007/02/23 18:20:58 momjian Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@@ -712,6 +712,57 @@ exec_command(const char *cmd,
free(pw2);
}
+ /* \prompt -- prompt and set variable */
+ else if (strcmp(cmd, "prompt") == 0)
+ {
+ char *opt, *prompt_text = NULL;
+ char *arg1, *arg2;
+
+ arg1 = psql_scan_slash_option(scan_state, OT_NORMAL, NULL, false);
+ arg2 = psql_scan_slash_option(scan_state, OT_NORMAL, NULL, false);
+
+ if (!arg1)
+ {
+ psql_error("\\%s: missing required argument\n", cmd);
+ success = false;
+ }
+ else
+ {
+ char *result;
+
+ if (arg2)
+ {
+ prompt_text = arg1;
+ opt = arg2;
+ }
+ else
+ opt = arg1;
+
+ if (!pset.inputfile)
+ result = simple_prompt(prompt_text, 4096, true);
+ else
+ {
+ if (prompt_text)
+ {
+ fputs(prompt_text, stdout);
+ fflush(stdout);
+ }
+ result = gets_fromFile(stdin);
+ }
+
+ if (!SetVariable(pset.vars, opt, result))
+ {
+ psql_error("\\%s: error\n", cmd);
+ success = false;
+ }
+
+ free(result);
+ if (prompt_text)
+ free(prompt_text);
+ free(opt);
+ }
+ }
+
/* \pset -- set printing parameters */
else if (strcmp(cmd, "pset") == 0)
{
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index e16c028997..027b5cb020 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2007, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.116 2007/01/05 22:19:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.117 2007/02/23 18:20:59 momjian Exp $
*/
#include "postgres_fe.h"
@@ -161,7 +161,7 @@ slashUsage(unsigned short int pager)
{
FILE *output;
- output = PageOutput(67, pager);
+ output = PageOutput(69, pager);
/* if you add/remove a line here, change the row count above */
@@ -184,6 +184,8 @@ slashUsage(unsigned short int pager)
fprintf(output, _(" \\timing toggle timing of commands (currently %s)\n"),
ON(pset.timing));
fprintf(output, _(" \\unset NAME unset (delete) internal variable\n"));
+ fprintf(output, _(" \\prompt [TEXT] NAME\n"
+ " prompt user to set internal variable\n"));
fprintf(output, _(" \\! [COMMAND] execute command in shell or start interactive shell\n"));
fprintf(output, "\n");
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 8012b70a4d..63db48546b 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2007, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.158 2007/02/07 00:52:35 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.159 2007/02/23 18:20:59 momjian Exp $
*/
/*----------------------------------------------------------------------
@@ -542,7 +542,7 @@ psql_completion(char *text, int start, int end)
"\\e", "\\echo", "\\encoding",
"\\f", "\\g", "\\h", "\\help", "\\H", "\\i", "\\l",
"\\lo_import", "\\lo_export", "\\lo_list", "\\lo_unlink",
- "\\o", "\\p", "\\password", "\\pset", "\\q", "\\qecho", "\\r",
+ "\\o", "\\p", "\\password", "\\prompt", "\\pset", "\\q", "\\qecho", "\\r",
"\\set", "\\t", "\\T",
"\\timing", "\\unset", "\\x", "\\w", "\\z", "\\!", NULL
};