Bruce Momjian wrote:
> Tom Lane wrote:
> > Bruce Momjian <[EMAIL PROTECTED]> writes:
> > > I just checked a few apps and I see they usually allow a global config
> > > file to be specified.  How about SYSPSQLRC that adds a system-wide psql
> > > config file to be read before the one in the home directory?
> > 
> > The ones I know of that allow such a thing generally hard-wire the
> > location of the global config file at build time, rather than taking it
> > from an environment variable.  The env var approach seems weird, and a
> > tad inefficient (since you'd have to put such an env var into the global
> > .profile, meaning it propagates into every single process ever launched
> > on your system).  Also I think we have at least one global config file
> > already for libpq, and its location is hard-wired.
> 
> Agreed.  There is usually one global config file, and SYS* overrides it.
> The global one we have now is pg_service.conf.  Maybe we should forget
> the environment variable idea and just have a pgsql.rc.sample file in
> share, with documentation in the file on how to install it.  That is
> what we do with pg_service.conf now for libpq.

The attached patch implements a global psql.rc file that is read before
the one in the user's home directory --- doc changes included.

It is configured just like pg_service.conf.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/ref/psql-ref.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/psql-ref.sgml,v
retrieving revision 1.112
diff -c -c -r1.112 psql-ref.sgml
*** doc/src/sgml/ref/psql-ref.sgml      21 Apr 2004 00:34:18 -0000      1.112
--- doc/src/sgml/ref/psql-ref.sgml      21 Apr 2004 03:51:13 -0000
***************
*** 440,446 ****
        <term><option>--no-psqlrc</></term>
        <listitem>
        <para>
!       Do not read the start-up file <filename>~/.psqlrc</filename>.
        </para>
        </listitem>
      </varlistentry>
--- 440,447 ----
        <term><option>--no-psqlrc</></term>
        <listitem>
        <para>
!       Do not read the start-up file <filename>/psql.rc</filename> or
!       <filename>~/.psqlrc</filename>.
        </para>
        </listitem>
      </varlistentry>
***************
*** 1859,1866 ****
        <para>
         The autocommit-on mode is <productname>PostgreSQL</>'s traditional
         behavior, but autocommit-off is closer to the SQL spec.  If you
!        prefer autocommit-off, you may wish to set it in
!        your <filename>.psqlrc</filename> file.
        </para>
        </note>
        </listitem>
--- 1860,1868 ----
        <para>
         The autocommit-on mode is <productname>PostgreSQL</>'s traditional
         behavior, but autocommit-off is closer to the SQL spec.  If you
!        prefer autocommit-off, you may wish to set it in the system-wide
!          <filename>psql.rc</filename> or your 
!          <filename>.psqlrc</filename> file.
        </para>
        </note>
        </listitem>
***************
*** 2488,2496 ****
     <listitem>
      <para>
       Before starting up, <application>psql</application> attempts to
!      read and execute commands from the file
!      <filename>$HOME/.psqlrc</filename>. It could be used to set up
!      the client or the server to taste (using the <command>\set
       </command> and <command>SET</command> commands).
      </para>
     </listitem>
--- 2490,2501 ----
     <listitem>
      <para>
       Before starting up, <application>psql</application> attempts to
!      read and execute commands from the the system-wide
!      <filename>psql.rc</filename> file and the  
!      <filename>$HOME/.psqlrc</filename> file in the user's home
!      directory.  See <filename><replaceable>PREFIX</>/share/psql.rc.sample</> 
!      for information on setting up the system-wide file.  It could be used 
!      to set up the client or the server to taste (using the <command>\set
       </command> and <command>SET</command> commands).
      </para>
     </listitem>
Index: src/bin/psql/Makefile
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/Makefile,v
retrieving revision 1.40
diff -c -c -r1.40 Makefile
*** src/bin/psql/Makefile       9 Mar 2004 19:47:05 -0000       1.40
--- src/bin/psql/Makefile       21 Apr 2004 03:51:14 -0000
***************
*** 15,21 ****
  
  REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref
  
! override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -DFRONTEND
  
  OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
        startup.o prompt.o variables.o large_obj.o print.o describe.o \
--- 15,21 ----
  
  REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref
  
! override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -DFRONTEND 
-DSYSCONFDIR='"$(sysconfdir)"'
  
  OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
        startup.o prompt.o variables.o large_obj.o print.o describe.o \
***************
*** 50,55 ****
--- 50,56 ----
  
  install: all installdirs
        $(INSTALL_PROGRAM) psql$(X) $(DESTDIR)$(bindir)/psql$(X)
+       $(INSTALL_DATA) $(srcdir)/psql.rc.sample $(DESTDIR)$(datadir)/psql.rc.sample
  
  installdirs:
        $(mkinstalldirs) $(DESTDIR)$(bindir)
Index: src/bin/psql/startup.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.88
diff -c -c -r1.88 startup.c
*** src/bin/psql/startup.c      19 Apr 2004 17:42:58 -0000      1.88
--- src/bin/psql/startup.c      21 Apr 2004 03:51:15 -0000
***************
*** 44,50 ****
   */
  PsqlSettings pset;
  
! #define PSQLRC ".psqlrc"
  
  /*
   * Structures to pass information between the option parsing routine
--- 44,51 ----
   */
  PsqlSettings pset;
  
! #define PSQLRC                ".psqlrc"
! #define SYSPSQLRC     "psql.rc"
  
  /*
   * Structures to pass information between the option parsing routine
***************
*** 74,79 ****
--- 75,81 ----
  static void parse_psql_options(int argc, char *argv[],
                                   struct adhoc_opts * options);
  static void process_psqlrc(void);
+ static void process_psqlrc_file(char *filename);
  static void showVersion(void);
  
  #ifdef USE_SSL
***************
*** 562,567 ****
--- 564,572 ----
  
  }
  
+ #ifndef SYSCONFDIR
+ #error "You must compile this file with SYSCONFDIR defined."
+ #endif
  
  
  /*
***************
*** 570,601 ****
  static void
  process_psqlrc(void)
  {
!       char       *psqlrc;
        char       *home;
  
  #if defined(WIN32) && (!defined(__MINGW32__))
  #define R_OK 4
  #endif
  
!       /* Look for one in the home dir */
!       home = getenv("HOME");
! 
!       if (home)
!       {
!               psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1 +
!                                                  strlen(PG_VERSION) + 1);
!               sprintf(psqlrc, "%s/%s-%s", home, PSQLRC, PG_VERSION);
  
!               if (access(psqlrc, R_OK) == 0)
!                       process_file(psqlrc);
!               else
!               {
!                       sprintf(psqlrc, "%s/%s", home, PSQLRC);
!                       if (access(psqlrc, R_OK) == 0)
!                               process_file(psqlrc);
!               }
!               free(psqlrc);
!       }
  }
  
  
--- 575,613 ----
  static void
  process_psqlrc(void)
  {
!       char       *globalFile = SYSCONFDIR "/" SYSPSQLRC;
        char       *home;
+       char       *psqlrc;
+ 
+       process_psqlrc_file(globalFile);
+ 
+       if ((home = getenv("HOME")) != NULL)
+       {
+               psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1);
+               sprintf(psqlrc, "%s/%s", home, PSQLRC);
+               process_psqlrc_file(psqlrc);
+       }
+ }
+ 
+ 
+ 
+ static void
+ process_psqlrc_file(char *filename)
+ {
+       char       *psqlrc;
  
  #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);
  
!       if (access(psqlrc, R_OK) == 0)
!               process_file(psqlrc);
!       else if (access(filename, R_OK) == 0)
!                       process_file(filename);
!       free(psqlrc);
  }
  
  
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to