aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2010-03-06 15:28:09 +0000
committerMagnus Hagander <magnus@hagander.net>2010-03-06 15:28:09 +0000
commit66c2cc2ba93ea9015b7ce43a2fb4edc601eaaf94 (patch)
tree5604c7bd7c9eb8d028091b46be5ef07827e9fdf8 /src
parentb8b34b7b44ee7d932b2a1317232ff15fb72cf1a7 (diff)
downloadpostgresql-66c2cc2ba93ea9015b7ce43a2fb4edc601eaaf94.tar.gz
postgresql-66c2cc2ba93ea9015b7ce43a2fb4edc601eaaf94.zip
Add --psqlrc=FILENAME parameter to psql, to process an explicitly named
file instead of ~/.psqlrc on startup.
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/help.c3
-rw-r--r--src/bin/psql/startup.c26
2 files changed, 20 insertions, 9 deletions
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 6b835fbd26c..8d6350fce2d 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2010, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.155 2010/01/02 16:57:59 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.156 2010/03/06 15:28:09 mha Exp $
*/
#include "postgres_fe.h"
@@ -99,6 +99,7 @@ usage(void)
printf(_(" -v, --set=, --variable=NAME=VALUE\n"
" set psql variable NAME to VALUE\n"));
printf(_(" -X, --no-psqlrc do not read startup file (~/.psqlrc)\n"));
+ printf(_(" --psqlrc=FILENAME read startup commands from file (instead of ~/.psqlrc)\n"));
printf(_(" -1 (\"one\"), --single-transaction\n"
" execute command file as a single transaction\n"));
printf(_(" --help show this help, then exit\n"));
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index c34de5cd8cb..6fac694cfbb 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2010, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.162 2010/02/26 02:01:19 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.163 2010/03/06 15:28:09 mha Exp $
*/
#include "postgres_fe.h"
@@ -68,11 +68,12 @@ struct adhoc_opts
bool no_readline;
bool no_psqlrc;
bool single_txn;
+ char *psqlrc;
};
static void parse_psql_options(int argc, char *argv[],
struct adhoc_opts * options);
-static void process_psqlrc(char *argv0);
+static void process_psqlrc(char *argv0, struct adhoc_opts *options);
static void process_psqlrc_file(char *filename);
static void showVersion(void);
static void EstablishVariableSpace(void);
@@ -247,8 +248,7 @@ main(int argc, char *argv[])
*/
if (options.action == ACT_FILE)
{
- if (!options.no_psqlrc)
- process_psqlrc(argv[0]);
+ process_psqlrc(argv[0], &options);
successResult = process_file(options.action_string, options.single_txn);
}
@@ -291,8 +291,7 @@ main(int argc, char *argv[])
*/
else
{
- if (!options.no_psqlrc)
- process_psqlrc(argv[0]);
+ process_psqlrc(argv[0], &options);
connection_warnings(true);
if (!pset.quiet && !pset.notty)
@@ -355,6 +354,7 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
{"password", no_argument, NULL, 'W'},
{"expanded", no_argument, NULL, 'x'},
{"no-psqlrc", no_argument, NULL, 'X'},
+ {"psqlrc", required_argument, NULL, 1},
{"help", no_argument, NULL, '?'},
{NULL, 0, NULL, 0}
};
@@ -515,6 +515,9 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
case 'X':
options->no_psqlrc = true;
break;
+ case 1:
+ options->psqlrc = pg_strdup(optarg);
+ break;
case '1':
options->single_txn = true;
break;
@@ -563,20 +566,27 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
* Load .psqlrc file, if found.
*/
static void
-process_psqlrc(char *argv0)
+process_psqlrc(char *argv0, struct adhoc_opts *options)
{
char home[MAXPGPATH];
char rc_file[MAXPGPATH];
char my_exec_path[MAXPGPATH];
char etc_path[MAXPGPATH];
+ if (options->no_psqlrc)
+ return;
+
find_my_exec(argv0, my_exec_path);
get_etc_path(my_exec_path, etc_path);
snprintf(rc_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
process_psqlrc_file(rc_file);
- if (get_home_path(home))
+ if (options->psqlrc)
+ {
+ process_psqlrc_file(options->psqlrc);
+ }
+ else if (get_home_path(home))
{
snprintf(rc_file, MAXPGPATH, "%s/%s", home, PSQLRC);
process_psqlrc_file(rc_file);