Andrew Dunstan wrote:


Tom Lane wrote:
Bruce Momjian <[EMAIL PROTECTED]> writes:
OK, good to know.  Does the patch need documentation too?

Certainly.


That's why I haven't committed it yet. I intend to put info in the psql manual as well as in the libpq reference.
Are we
deprecating the psql options now duplicated by the new functionality,
like host/port/username/password?

I'd vote not.  This is just another way to do it.


I entirely agree. It lets you do some nice things that aren't obvious now, like:

 psql 'service=foo sslmode=require'



Patch (Tom's code, my docs) attached.

cheers

andrew

Index: doc/src/sgml/libpq.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v
retrieving revision 1.220
diff -c -r1.220 libpq.sgml
*** doc/src/sgml/libpq.sgml	10 Nov 2006 22:15:26 -0000	1.220
--- doc/src/sgml/libpq.sgml	18 Dec 2006 16:52:39 -0000
***************
*** 324,336 ****
                       const char *login,
                       const char *pwd);
  </synopsis>
! </para>
  
! <para>
!    This is the predecessor of <function>PQconnectdb</function> with a fixed
!    set of parameters.  It has the same functionality except that the
!    missing parameters will always take on default values.  Write <symbol>NULL</symbol> or an
!    empty string for any one of the fixed parameters that is to be defaulted.
     </para>
    </listitem>
   </varlistentry>
--- 324,342 ----
                       const char *login,
                       const char *pwd);
  </synopsis>
!     </para>
  
!     <para>
!      This is the predecessor of <function>PQconnectdb</function> with a fixed
!      set of parameters.  It has the same functionality except that the
!      missing parameters will always take on default values.  Write <symbol>NULL</symbol> or an
!      empty string for any one of the fixed parameters that is to be defaulted.
!    </para>
!    <para>
!      If the <parameter>dbName</parameter> contains an <symbol>=</symbol> sign, it
! 	 is taken as a <parameter>conninfo</parameter> string in exactly the same way as
! 	 if it had been passed to <function>PQconnectdb</function>, and the remaining
! 	 parameters are then applied as above.
     </para>
    </listitem>
   </varlistentry>
Index: doc/src/sgml/ref/psql-ref.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v
retrieving revision 1.175
diff -c -r1.175 psql-ref.sgml
*** doc/src/sgml/ref/psql-ref.sgml	21 Nov 2006 17:01:58 -0000	1.175
--- doc/src/sgml/ref/psql-ref.sgml	18 Dec 2006 16:52:40 -0000
***************
*** 112,117 ****
--- 112,121 ----
        class="parameter">dbname</replaceable> as the first non-option
        argument on the command line.
        </para>
+ 	  <para>
+ 	  If this parameter contains an <symbol>=</symbol> sign, it it treated as a
+ 	  <parameter>conninfo</parameter> string. See <xref linkend="libpq-connect"> for more information.
+ 	  </para>
        </listitem>
      </varlistentry>
  
***************
*** 554,559 ****
--- 558,575 ----
      passwords. See <xref linkend="libpq-pgpass"> for more information.
      </para>
  
+ 	<para>
+     An alternative way to specify connection parameters is in a
+ 	<parameter>conninfo</parameter>	string, which is used instead of a 
+ 	database name. This mechanism give you very wide control over the 
+ 	connection. For example,
+ <programlisting>
+ $ <userinput>psql "service=myservice sslmode=require"</userinput>
+ </programlisting>
+     See <xref linkend="libpq-connect"> for more information on all the
+ 	available connection options.
+ 	</para>
+ 
      <para>
      If the connection could not be made for any reason (e.g., insufficient
      privileges, server is not running on the targeted host, etc.),
Index: src/interfaces/libpq/fe-connect.c
===================================================================
RCS file: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.339
diff -c -r1.339 fe-connect.c
*** src/interfaces/libpq/fe-connect.c	21 Nov 2006 16:28:00 -0000	1.339
--- src/interfaces/libpq/fe-connect.c	18 Dec 2006 16:52:43 -0000
***************
*** 574,589 ****
  	conn = makeEmptyPGconn();
  	if (conn == NULL)
  		return NULL;
! 
! 	/*
! 	 * Parse an empty conninfo string in order to set up the same defaults
! 	 * that PQconnectdb() would use.
! 	 */
! 	if (!connectOptions1(conn, ""))
! 		return conn;
! 
! 	/*
! 	 * Absorb specified options into conn structure, overriding defaults
  	 */
  	if (pghost && pghost[0] != '\0')
  	{
--- 574,609 ----
  	conn = makeEmptyPGconn();
  	if (conn == NULL)
  		return NULL;
!     /*
!      * If the dbName parameter contains '=', assume it's a conninfo
!      * string.
!      */
!     if (dbName && strchr(dbName,'='))
!     {
!         if (!connectOptions1(conn, dbName))
!             return conn;
!     }
!     else
!     {
!         /*
!          * Old-style path: first, parse an empty conninfo string in
!          * order to set up the same defaults that PQconnectdb() would use.
!          */
!         if (!connectOptions1(conn, ""))
!             return conn;
! 
!         /* Insert dbName parameter value into struct */
!         if (dbName && dbName[0] != '\0')
!         {
!             if (conn->dbName)
!                 free(conn->dbName);
!             conn->dbName = strdup(dbName);
!         }
!     }
! 
!     /*
!      * Insert remaining parameters into struct, overriding defaults
!      * (as well as any conflicting data from dbName taken as a conninfo).
  	 */
  	if (pghost && pghost[0] != '\0')
  	{
***************
*** 613,625 ****
  		conn->pgtty = strdup(pgtty);
  	}
  
- 	if (dbName && dbName[0] != '\0')
- 	{
- 		if (conn->dbName)
- 			free(conn->dbName);
- 		conn->dbName = strdup(dbName);
- 	}
- 
  	if (login && login[0] != '\0')
  	{
  		if (conn->pguser)
--- 633,638 ----
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to