]> granicus.if.org Git - postgresql/commitdiff
Allow a major PG version psql .psqlrc file to be used if a minor
authorBruce Momjian <bruce@momjian.us>
Sat, 15 Oct 2011 00:26:28 +0000 (20:26 -0400)
committerBruce Momjian <bruce@momjian.us>
Sat, 15 Oct 2011 00:27:14 +0000 (20:27 -0400)
matching version file does not exist.  This avoids needing to rename
.psqlrc files after minor version upgrades.

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

index 662eab7b6d08e4102755260379ef77dcb483cc08..4eefe3b4ab27153541781eb9aacbcf49b5ed7e6d 100644 (file)
@@ -3332,8 +3332,10 @@ PSQL_EDITOR_LINENUMBER_ARG='--line '
      Both the system-wide <filename>psqlrc</filename> file and the user's
      <filename>~/.psqlrc</filename> file can be made version-specific
      by appending a dash and the <productname>PostgreSQL</productname>
-     release number, for example <filename>~/.psqlrc-&version;</filename>.
-     A matching version-specific file will be read in preference to a
+     major or minor release number, for example
+     <filename>~/.psqlrc-9.2</filename> or
+     <filename>~/.psqlrc-9.2.5</filename>.  The most specific
+     version-matching file will be read in preference to a
      non-version-specific file.
     </para>
    </listitem>
index 3c17eece7b887cd6675e66b847c796b5dcf94522..71829eb6ec36b5266a269a0f5b6e2185ba4b5167 100644 (file)
@@ -594,20 +594,27 @@ process_psqlrc(char *argv0)
 static void
 process_psqlrc_file(char *filename)
 {
-       char       *psqlrc;
+       char       *psqlrc_minor, *psqlrc_major;
 
 #if defined(WIN32) && (!defined(__MINGW32__))
 #define R_OK 4
 #endif
 
-       psqlrc = pg_malloc(strlen(filename) + 1 + strlen(PG_VERSION) + 1);
-       sprintf(psqlrc, "%s-%s", filename, PG_VERSION);
+       psqlrc_minor = pg_malloc(strlen(filename) + 1 + strlen(PG_VERSION) + 1);
+       sprintf(psqlrc_minor, "%s-%s", filename, PG_VERSION);
+       psqlrc_major = pg_malloc(strlen(filename) + 1 + strlen(PG_MAJORVERSION) + 1);
+       sprintf(psqlrc_major, "%s-%s", filename, PG_MAJORVERSION);
 
-       if (access(psqlrc, R_OK) == 0)
-               (void) process_file(psqlrc, false, false);
+       /* check for minor version first, then major, then no version */
+       if (access(psqlrc_minor, R_OK) == 0)
+               (void) process_file(psqlrc_minor, false, false);
+       else if (access(psqlrc_major, R_OK) == 0)
+               (void) process_file(psqlrc_major, false, false);
        else if (access(filename, R_OK) == 0)
                (void) process_file(filename, false, false);
-       free(psqlrc);
+
+       free(psqlrc_minor);
+       free(psqlrc_major);
 }