diff options
author | Bruce Momjian | 2011-10-15 00:26:28 +0000 |
---|---|---|
committer | Bruce Momjian | 2011-10-15 00:27:14 +0000 |
commit | 2795592e52c88e510ae4bcbc17b305d6adc0b2b6 (patch) | |
tree | d0cef3a0098170a77ab184a0aad8ed69dc8220c9 | |
parent | d26e1ebaf5f8f59c27327e8fd810fa4b26431a1f (diff) |
Allow a major PG version psql .psqlrc file to be used if a minor
matching version file does not exist. This avoids needing to rename
.psqlrc files after minor version upgrades.
-rw-r--r-- | doc/src/sgml/ref/psql-ref.sgml | 6 | ||||
-rw-r--r-- | src/bin/psql/startup.c | 19 |
2 files changed, 17 insertions, 8 deletions
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 662eab7b6d..4eefe3b4ab 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -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> diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 3c17eece7b..71829eb6ec 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -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); } |