Add --psqlrc=FILENAME parameter to psql, to process an explicitly named
authorMagnus Hagander
Sat, 6 Mar 2010 15:28:09 +0000 (15:28 +0000)
committerMagnus Hagander
Sat, 6 Mar 2010 15:28:09 +0000 (15:28 +0000)
file instead of ~/.psqlrc on startup.

doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/help.c
src/bin/psql/startup.c

index 039ad0e301c5eb7080579c55fd00a9984b7717c1..93b6d4c6c22b87edb225ce34f41bd00a8bb6cc9d 100644 (file)
@@ -1,5 +1,5 @@
 
 
@@ -481,6 +481,16 @@ PostgreSQL documentation
       
     
 
+    
+      
+      
+      
+      Read the start-up file from FILENAME
+      instead of ~/.psqlrc.
+      
+      
+    
+
      
       
       
index 6b835fbd26c5be0b4e9efaab56e86f2747c0ca25..8d6350fce2d5e394e39d23b500fe0bec7c4f4fd2 100644 (file)
@@ -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"));
index c34de5cd8cbe0d73e90d041fe1567699af9fa980..6fac694cfbb1a56f50be63a6d8c0242f4e8ef0aa 100644 (file)
@@ -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);