From 66c2cc2ba93ea9015b7ce43a2fb4edc601eaaf94 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Sat, 6 Mar 2010 15:28:09 +0000 Subject: [PATCH] Add --psqlrc=FILENAME parameter to psql, to process an explicitly named file instead of ~/.psqlrc on startup. --- doc/src/sgml/ref/psql-ref.sgml | 12 +++++++++++- src/bin/psql/help.c | 3 ++- src/bin/psql/startup.c | 26 ++++++++++++++++++-------- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 039ad0e301..93b6d4c6c2 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ @@ -481,6 +481,16 @@ PostgreSQL documentation + + + + + Read the start-up file from FILENAME + instead of ~/.psqlrc. + + + + diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 6b835fbd26..8d6350fce2 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 c34de5cd8c..6fac694cfb 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);