OSDN Git Service

Make all command-line options of postmaster and postgres the same. See
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 5 Jan 2006 10:07:46 +0000 (10:07 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 5 Jan 2006 10:07:46 +0000 (10:07 +0000)
http://archives.postgresql.org/pgsql-hackers/2006-01/msg00151.php for the
complete plan.

15 files changed:
doc/src/sgml/config.sgml
doc/src/sgml/ref/postgres-ref.sgml
doc/src/sgml/ref/postmaster.sgml
src/backend/access/index/genam.c
src/backend/bootstrap/bootstrap.c
src/backend/commands/trigger.c
src/backend/optimizer/util/plancat.c
src/backend/postmaster/postmaster.c
src/backend/tcop/postgres.c
src/backend/utils/cache/relcache.c
src/backend/utils/init/miscinit.c
src/backend/utils/misc/guc.c
src/bin/initdb/initdb.c
src/include/miscadmin.h
src/include/tcop/tcopprot.h

index acc1ec9..293ee35 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.41 2005/12/27 23:54:01 adunstan Exp $
+$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.42 2006/01/05 10:07:44 petere Exp $
 -->
 <chapter Id="runtime-config">
   <title>Server Configuration</title>
@@ -2407,8 +2407,7 @@ SELECT * FROM parent WHERE key = 2400;
        <para>
         Runs the server silently. If this option is set, the server
         will automatically run in background and any controlling
-        terminals are disassociated (same effect as
-        <command>postmaster</>'s <option>-S</option> option).
+        terminals are disassociated.
         The server's standard output and standard error are redirected
         to <literal>/dev/null</>, so any messages sent to them will be lost.
         Unless <application>syslog</> logging is selected or
@@ -4054,6 +4053,19 @@ plruby.use_strict = true        # generates error: unknown class name
     </para>
 
     <variablelist>
+     <varlistentry id="guc-allow-system-table-mods" xreflabel="allow_system_table_mods">
+      <term><varname>allow_system_table_mods</varname> (<type>boolean</type>)</term>
+      <indexterm>
+        <primary><varname>allow_system_table_mods</varname> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Allows the modification of the structure of system tables.
+        This is used by <command>initdb</command>.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-debug-assertions" xreflabel="debug_assertions">
       <term><varname>debug_assertions</varname> (<type>boolean</type>)</term>
       <indexterm>
@@ -4075,6 +4087,35 @@ plruby.use_strict = true        # generates error: unknown class name
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-ignore-system-indexes" xreflabel="ignore_system_indexes">
+      <term><varname>ignore_system_indexes</varname> (<type>boolean</type>)</term>
+      <indexterm>
+        <primary><varname>ignore_system_indexes</varname> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Ignore system indexes when reading system tables (but still
+        update the indexes when modifying the tables).  This is useful
+        when recovering from damaged system indexes.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry id="guc-post-auth-delay" xreflabel="post_auth_delay">
+      <term><varname>post_auth_delay</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>post_auth_delay</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        If nonzero, a delay of this many seconds occurs when a new
+        server process is started, after it conducts the
+        authentication procedure.  This is intended to give an
+        opportunity to attach to the server process with a debugger.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-pre-auth-delay" xreflabel="pre_auth_delay">
       <term><varname>pre_auth_delay</varname> (<type>integer</type>)</term>
       <indexterm>
@@ -4082,11 +4123,11 @@ plruby.use_strict = true        # generates error: unknown class name
       </indexterm>
       <listitem>
        <para>
-        If nonzero, a delay of this many seconds occurs just after a new
-        server process is forked, before it conducts the authentication
-        process.  This is intended to give an opportunity to attach to the
-        server process with a debugger to trace down misbehavior in
-        authentication.
+        If nonzero, a delay of this many seconds occurs just after a
+        new server process is forked, before it conducts the
+        authentication procedure.  This is intended to give an
+        opportunity to attach to the server process with a debugger to
+        trace down misbehavior in authentication.
        </para>
       </listitem>
      </varlistentry>
@@ -4182,9 +4223,12 @@ plruby.use_strict = true        # generates error: unknown class name
    <title>Short Options</title>
 
    <para>
-    For convenience there are also single letter command-line option switches
-    available for some parameters. They are described in <xref
-    linkend="runtime-config-short-table">.
+    For convenience there are also single letter command-line option
+    switches available for some parameters.  They are described in
+    <xref linkend="runtime-config-short-table">.  Some of these
+    options exist for historical reasons, and their presence as a
+    single-letter option does not necessarily indicate an endorsement
+    to use the option heavily.
    </para>
 
     <table id="runtime-config-short-table">
@@ -4199,6 +4243,10 @@ plruby.use_strict = true        # generates error: unknown class name
 
       <tbody>
        <row>
+        <entry><option>-A <replaceable>x</replaceable></option></entry>
+        <entry><literal>debug_assertions = <replaceable>x</replaceable></></entry>
+       </row>
+       <row>
         <entry><option>-B <replaceable>x</replaceable></option></entry>
         <entry><literal>shared_buffers = <replaceable>x</replaceable></></entry>
        </row>
@@ -4207,6 +4255,26 @@ plruby.use_strict = true        # generates error: unknown class name
         <entry><literal>log_min_messages = DEBUG<replaceable>x</replaceable></></entry>
        </row>
        <row>
+        <entry><option>-e</option></entry>
+        <entry><literal>datestyle = euro</></entry>
+       </row>
+       <row>
+        <entry>
+          <option>-fb</option>, <option>-fh</option>, <option>-fi</option>,
+          <option>-fm</option>, <option>-fn</option>,
+          <option>-fs</option>, <option>-ft</option>
+         </entry>
+         <entry>
+          <literal>enable_bitmapscan = off</>,
+          <literal>enable_hashjoin = off</>,
+          <literal>enable_indexscan = off</>,
+          <literal>enable_mergejoin = off</>,
+          <literal>enable_nestloop = off</>,
+          <literal>enable_seqscan = off</>,
+          <literal>enable_tidscan = off</>
+         </entry>
+       </row>
+       <row>
         <entry><option>-F</option></entry>
         <entry><literal>fsync = off</></entry>
        </row>
@@ -4231,56 +4299,35 @@ plruby.use_strict = true        # generates error: unknown class name
         <entry><literal>max_connections = <replaceable>x</replaceable></></entry>
        </row>
        <row>
+        <entry><option>-O</option></entry>
+        <entry><literal>allow_system_table_mods = on</></entry>
+       </row>
+       <row>
         <entry><option>-p <replaceable>x</replaceable></option></entry>
         <entry><literal>port = <replaceable>x</replaceable></></entry>
        </row>
-
        <row>
-        <entry>
-          <option>-fb</option>, <option>-fh</option>, <option>-fi</option>,
-          <option>-fm</option>, <option>-fn</option>,
-          <option>-fs</option>, <option>-ft</option><footnote
-          id="fn.runtime-config-short">
-           <para>
-            For historical reasons, these options must be passed to
-            the individual server process via the <option>-o</option>
-            <command>postmaster</command> option, for example,
-<screen>
-$ <userinput>postmaster -o '-S 1024 -s'</userinput>
-</screen>
-            or via <envar>PGOPTIONS</envar> from the client side, as
-            explained above.
-           </para>
-          </footnote>
-         </entry>
-         <entry>
-          <literal>enable_bitmapscan = off</>,
-          <literal>enable_hashjoin = off</>,
-          <literal>enable_indexscan = off</>,
-          <literal>enable_mergejoin = off</>,
-          <literal>enable_nestloop = off</>,
-          <literal>enable_seqscan = off</>,
-          <literal>enable_tidscan = off</>
-         </entry>
+        <entry><option>-P</option></entry>
+        <entry><literal>ignore_system_indexes = on</></entry>
        </row>
-
        <row>
-        <entry><option>-s</option><footnoteref linkend="fn.runtime-config-short"></entry>
+        <entry><option>-s</option></entry>
         <entry><literal>log_statement_stats = on</></entry>
        </row>
-
        <row>
-        <entry><option>-S <replaceable>x</replaceable></option><footnoteref linkend="fn.runtime-config-short">
-        </entry>
+        <entry><option>-S <replaceable>x</replaceable></option></entry>
         <entry><literal>work_mem = <replaceable>x</replaceable></></entry>
        </row>
-
        <row>
-        <entry><option>-tpa</option>, <option>-tpl</option>, <option>-te</option><footnoteref linkend="fn.runtime-config-short"></entry>
+        <entry><option>-tpa</option>, <option>-tpl</option>, <option>-te</option></entry>
         <entry><literal>log_parser_stats = on</>,
         <literal>log_planner_stats = on</>, 
         <literal>log_executor_stats = on</></entry>
        </row>
+       <row>
+        <entry><option>-W <replaceable>x</replaceable></option></entry>
+        <entry><literal>post_auth_delay = <replaceable>x</replaceable></></entry>
+       </row>
       </tbody>
      </tgroup>
     </table>
index 4baecaf..1cf8521 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/postgres-ref.sgml,v 1.45 2004/11/15 06:32:15 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/postgres-ref.sgml,v 1.46 2006/01/05 10:07:44 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -21,53 +21,9 @@ PostgreSQL documentation
 
  <refsynopsisdiv>
   <cmdsynopsis>
-   <!-- standalone call -->
    <command>postgres</command>
-   <arg>-A <group choice="plain"><arg>0</arg><arg>1</arg></group></arg>
-   <arg>-B <replaceable>nbuffers</replaceable></arg>
-   <arg>-c <replaceable>name</replaceable>=<replaceable>value</replaceable></arg>
-   <arg>-d <replaceable>debug-level</replaceable></arg>
-   <arg>--describe-config</arg>
-   <arg>-D <replaceable>datadir</replaceable></arg>
-   <arg>-e</arg>
-   <arg>-E</arg>
-   <arg>-f<group choice="plain"><arg>s</arg><arg>i</arg><arg>t</arg><arg>n</arg><arg>m</arg><arg>h</arg></group></arg>
-   <arg>-F</arg>
-   <arg>-N</arg>
-   <arg>-o <replaceable>filename</replaceable></arg>
-   <arg>-O</arg>
-   <arg>-P</arg>
-   <group>
-    <arg>-s</arg>
-    <arg>-t<group choice="plain"><arg>pa</arg><arg>pl</arg><arg>ex</arg></group></arg>
-   </group>
-   <arg>-S <replaceable>work-mem</replaceable></arg>
-   <arg>-W <replaceable>seconds</replaceable></arg>
-   <arg>--<replaceable>name</replaceable>=<replaceable>value</replaceable></arg>
+   <arg rep="repeat"><replaceable>option</></arg>
    <arg choice="plain"><replaceable>database</replaceable></arg>
-   <sbr>
-   <!-- postmaster fork -->
-   <command>postgres</command>
-   <arg>-A <group choice="plain"><arg>0</arg><arg>1</arg></group></arg>
-   <arg>-B <replaceable>nbuffers</replaceable></arg>
-   <arg>-c <replaceable>name</replaceable>=<replaceable>value</replaceable></arg>
-   <arg>-d <replaceable>debug-level</replaceable></arg>
-   <arg>-D <replaceable>datadir</replaceable></arg>
-   <arg>-e</arg>
-   <arg>-f<group choice="plain"><arg>s</arg><arg>i</arg><arg>t</arg><arg>n</arg><arg>m</arg><arg>h</arg></group></arg>
-   <arg>-F</arg>
-   <arg>-o <replaceable>filename</replaceable></arg>
-   <arg>-O</arg>
-   <arg>-p <replaceable>database</replaceable></arg>
-   <arg>-P</arg>
-   <group>
-    <arg>-s</arg>
-    <arg>-t<group choice="plain"><arg>pa</arg><arg>pl</arg><arg>ex</arg></group></arg>
-   </group>
-   <arg>-S <replaceable>work-mem</replaceable></arg>
-   <arg>-v <replaceable>protocol</replaceable></arg>
-   <arg>-W <replaceable>seconds</replaceable></arg>
-   <arg>--<replaceable>name</replaceable>=<replaceable>value</replaceable></arg>
   </cmdsynopsis>
  </refsynopsisdiv>
 
@@ -77,23 +33,21 @@ PostgreSQL documentation
   <para>
    The <command>postgres</command> executable is the actual
    <productname>PostgreSQL</productname> server process that processes
-   queries.  It is normally not called directly; instead a <xref
-   linkend="app-postmaster"> multiuser server is started.
-  </para>
-
-  <para>
-   The second form above is how
-   <command>postgres</command> is invoked by the <xref
-   linkend="app-postmaster"> (only
-   conceptually, since both <filename>postmaster</filename> and
-   <filename>postgres</filename> are in fact the same program); it
-   should not be invoked directly this way.  The first form invokes
-   the server directly in interactive single-user mode.  The primary use
-   for this mode is during bootstrapping by <xref linkend="app-initdb">.
-   Sometimes it is used for debugging or disaster recovery.
+   SQL statements.  It is normally not called directly; instead a
+   <xref linkend="app-postmaster"> multiuser server is started.
+   Conceptually, the <command>postmaster</command> starts a new
+   <command>postgres</command> process for each connection.
+   (<filename>postmaster</filename> and <filename>postgres</filename>
+   are in fact the same program, and on most platforms the connection
+   process is forked).
   </para>
 
   <para>
+   If the <command>postgres</command> command is called directly, it
+   invokes the server in interactive single-user mode.  The primary
+   use for this mode is during bootstrapping by <xref
+   linkend="app-initdb">.  Sometimes it is used for debugging or
+   disaster recovery.
    When invoked in interactive mode from the shell, the user can enter
    queries and the results will be printed to the screen, but in a
    form that is more useful for developers than end users.  But note
@@ -117,11 +71,9 @@ PostgreSQL documentation
 
    <para>
     When <command>postgres</command> is started by a <xref
-    linkend="app-postmaster"> then it
-    inherits all options set by the latter.  Additionally,
-    <command>postgres</command>-specific options can be passed
-    from the <command>postmaster</command> with the
-    <option>-o</option> switch.
+    linkend="app-postmaster"> then it inherits all options set by the
+    latter.  In single-user mode, <command>postgres</command> accepts
+    all the options that <command>postmaster</command> would accept.
    </para>
 
    <para>
@@ -141,74 +93,17 @@ PostgreSQL documentation
     <para>
      The options <option>-A</option>, <option>-B</option>,
      <option>-c</option>, <option>-d</option>, <option>-D</option>,
-     <option>-F</option>, and <option>--<replaceable>name</></option> have the same meanings
-     as the <xref linkend="app-postmaster"> except that
-     <literal>-d 0</> prevents the server log level of
-     the <command>postmaster</> from being propagated to <command>postgres</>.
+     <option>-e</option>, <option>-F</option>, <option>-s</option>,
+     <option>-S</option>, and <option>--<replaceable>name</></option>
+     have the same meanings as with the <xref linkend="app-postmaster">
+     except that <literal>-d 0</> prevents the server log level of the
+     <command>postmaster</> from being propagated to
+     <command>postgres</>.  Other <command>postmaster</command>
+     options are also accepted but will have no noticeable effect
+     because they only apply to the multiuser server mode, namely
+     <option>-h</option>, <option>-i</option>, <option>-k</option>,
+     <option>-l</option>, and <option>-n</option>.
     </para>
-
-    <variablelist>
-     <varlistentry>
-      <term><option>-e</option></term>
-      <listitem>
-       <para>
-        Sets the default date style to <quote>European</quote>, that is
-       <literal>DMY</> ordering of input date fields.  This also causes
-       the day to be printed before the month in certain date output formats.
-       See <xref linkend="datatype-datetime"> for more information.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term><option>-o</option> <replaceable class="parameter">filename</replaceable></term>
-      <listitem>
-       <para>
-       Send all server log output to 
-       <replaceable class="parameter">filename</replaceable>.
-       If <command>postgres</command> is running under the
-       <command>postmaster</command>, this option is ignored,
-       and the <systemitem>stderr</> inherited from the
-       <command>postmaster</command> is used.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term><option>-P</option></term>
-      <listitem>
-       <para>
-       Ignore system indexes when reading system tables (but still update
-       the indexes when modifying the tables).  This is useful when
-       recovering from damaged system indexes.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term><option>-s</option></term>
-      <listitem>
-       <para>
-       Print time information and other statistics at the end of each command.
-       This is useful for benchmarking or for use in tuning the number of
-       buffers.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term><option>-S</option> <replaceable class="parameter">work-mem</replaceable></term>
-      <listitem>
-       <para>
-       Specifies the amount of memory to be used by internal sorts and hashes
-       before resorting to temporary disk files.  See the description of the
-       <varname>work_mem</> configuration parameter in <xref
-       linkend="runtime-config-resource-memory">.
-       </para>
-      </listitem>
-     </varlistentry>
-
-    </variablelist>
    </refsect2>
 
    <refsect2>
@@ -235,83 +130,41 @@ PostgreSQL documentation
      </varlistentry>
 
      <varlistentry>
-      <term><option>-N</option></term>
+      <term><option>-j</option></term>
       <listitem>
        <para>
        Disables use of newline as a statement delimiter.
        </para>
       </listitem>
      </varlistentry>
-    </variablelist>
-   </refsect2>
-
-   <refsect2>
-    <title>Semi-internal Options</title>
-
-    <para>
-     There are several other options that may be specified, used
-     mainly for debugging purposes.  These are listed here only for
-     the use by <productname>PostgreSQL</productname> system
-     developers.  <emphasis>Use of any of these options is highly
-     discouraged.</emphasis>  Furthermore, any of these options may
-     disappear or change in a future release without notice.
-   </para>
-    <variablelist>
-
-     <varlistentry>
-      <term><option>-f</option> <literal>{ s | i | m | n | h }</literal></term>
-      <listitem>
-       <para>
-       Forbids the use of particular scan and join methods:
-       <literal>s</literal> and <literal>i</literal>
-       disable sequential and index scans respectively, while
-       <literal>n</literal>, <literal>m</literal>, and <literal>h</literal>
-       disable nested-loop, merge and hash joins respectively.
-       </para>
-       
-       <note>
-        <para>
-         Neither sequential scans nor nested-loop joins can be disabled completely;
-         the <literal>-fs</literal> and <literal>-fn</literal>
-         options simply discourage the optimizer from using those
-         plan types if it has any other alternative.
-        </para>
-       </note>
-      </listitem>
-     </varlistentry>
 
      <varlistentry>
-      <term><option>-O</option></term>
+      <term><option>-r</option> <replaceable class="parameter">filename</replaceable></term>
       <listitem>
        <para>
-       Allows the structure of system tables to be modified.  This is
-       used by <command>initdb</command>.
+       Send all server log output to 
+       <replaceable class="parameter">filename</replaceable>.
+       If <command>postgres</command> is running under the
+       <command>postmaster</command>, this option is ignored,
+       and the <systemitem>stderr</> inherited from the
+       <command>postmaster</command> is used.
        </para>
       </listitem>
      </varlistentry>
+    </variablelist>
+   </refsect2>
 
-     <varlistentry>
-      <term><option>-p</option> <replaceable class="parameter">database</replaceable></term>
-      <listitem>
-       <para>
-       Indicates that this process has been started by a
-       <command>postmaster</command> and specifies the database to use.
-       etc.
-       </para>
-      </listitem>
-     </varlistentry>
+   <refsect2>
+    <title>Semi-internal Options</title>
 
-     <varlistentry>
-      <term><option>-t</option> <literal>pa[rser] | pl[anner] | e[xecutor]</literal></term>
-      <listitem>
-       <para>
-       Print timing statistics for each query relating to each of the
-       major system modules.  This option cannot be used together
-       with the <option>-s</option> option.
-       </para>
-      </listitem>
-     </varlistentry>
+    <para>
+     The options <option>-f</option>, <option>-O</option>,
+     <option>-P</option>, <option>-t</option>, and <option>-W</option>
+     have the same meanings as with the <xref
+     linkend="app-postmaster"> and are reserved for debugging and
+     disaster recovery.  Further options for internal use are:
 
+    <variablelist>
      <varlistentry>
       <term><option>-v</option> <replaceable class="parameter">protocol</replaceable></term>
       <listitem>
@@ -323,12 +176,12 @@ PostgreSQL documentation
      </varlistentry>
 
      <varlistentry>
-      <term><option>-W</option> <replaceable class="parameter">seconds</replaceable></term>
+      <term><option>-y</option> <replaceable class="parameter">database</replaceable></term>
       <listitem>
        <para>
-       As soon as this option is encountered, the process sleeps for
-       the specified amount of seconds.  This gives developers time
-       to attach a debugger to the server process.
+       Indicates that this process has been started by a
+       <command>postmaster</command> and specifies the database to use.
+       etc.
        </para>
       </listitem>
      </varlistentry>
@@ -343,8 +196,8 @@ PostgreSQL documentation
        </para>
       </listitem>
      </varlistentry>
-
     </variablelist>
+    </para>
    </refsect2>
  </refsect1>
 
@@ -361,13 +214,7 @@ PostgreSQL documentation
      </para>
     </listitem>
    </varlistentry>
-
   </variablelist>
-
-  <para>
-   For others, which have little influence during single-user mode,
-   see <xref linkend="app-postmaster">.
-  </para>
  </refsect1>
 
  <refsect1>
@@ -423,7 +270,7 @@ PostgreSQL documentation
    </para>
 
    <para>
-    But if you use the <option>-N</> command line switch, then newline does
+    But if you use the <option>-j</> command line switch, then newline does
     not terminate command entry.  In this case, the server will read the standard input
     until the end-of-file (<acronym>EOF</>) marker, then
     process the input as a single command string.  Backslash-newline is not
@@ -434,7 +281,7 @@ PostgreSQL documentation
     To quit the session, type <acronym>EOF</acronym>
     (<keycombo action="simul"><keycap>Control</><keycap>D</></>, usually).
     If you've
-    used <option>-N</>, two consecutive <acronym>EOF</>s are needed to exit.
+    used <option>-j</>, two consecutive <acronym>EOF</>s are needed to exit.
    </para>
 
    <para>
index aa332ed..77275e8 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/postmaster.sgml,v 1.54 2005/12/02 23:13:46 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/postmaster.sgml,v 1.55 2006/01/05 10:07:44 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -22,22 +22,7 @@ PostgreSQL documentation
  <refsynopsisdiv>
   <cmdsynopsis>
    <command>postmaster</command>
-   <arg>-A <group choice="plain"><arg>0</arg><arg>1</arg></group></arg>
-   <arg>-B <replaceable>nbuffers</replaceable></arg>
-   <arg>-c <replaceable>name</replaceable>=<replaceable>value</replaceable></arg>
-   <arg>-d <replaceable>debug-level</replaceable></arg>
-   <arg>-D <replaceable>datadir</replaceable></arg>
-   <arg>-F</arg>
-   <arg>-h <replaceable>hostname</replaceable></arg>
-   <arg>-i</arg>
-   <arg>-k <replaceable>directory</replaceable></arg>
-   <arg>-l</arg>
-   <arg>-N <replaceable>max-connections</replaceable></arg>
-   <arg>-o <replaceable>extra-options</replaceable></arg>
-   <arg>-p <replaceable>port</replaceable></arg>
-   <arg>-S</arg>
-   <arg>--<replaceable>name</replaceable>=<replaceable>value</replaceable></arg>
-   <group><arg>-n</arg><arg>-s</arg></group>
+   <arg rep="repeat"><replaceable>option</></arg>
   </cmdsynopsis>
  </refsynopsisdiv>
 
@@ -70,8 +55,7 @@ PostgreSQL documentation
    location (the <quote>data area</quote>).
    More than one <command>postmaster</command> process can run on a system
    at one time, so long as they use different data areas and different
-   communication ports (see below).  A data area is created with <xref
-   linkend="app-initdb">.
+   communication ports (see below).
   </para>
 
   <para>
@@ -83,6 +67,7 @@ PostgreSQL documentation
    directly to the data area directory created by <application>initdb</>.
    Other possible file layouts are discussed in
    <xref linkend="runtime-config-file-locations">.
+   A data area is created with <xref linkend="app-initdb">.
   </para>
  </refsect1>
 
@@ -92,8 +77,12 @@ PostgreSQL documentation
    <para>
     <command>postmaster</command> accepts the following
     command line arguments.  For a detailed discussion of the options
-    consult <xref linkend="runtime-config">.  You can also save typing most of these
+    consult <xref linkend="runtime-config">.  You can save typing most of these
     options by setting up a configuration file.
+   </para>
+
+   <refsect2>
+    <title>General Purpose</title>
     
     <variablelist>
      <varlistentry>
@@ -157,6 +146,18 @@ PostgreSQL documentation
      </varlistentry>
 
      <varlistentry>
+      <term><option>-e</option></term>
+      <listitem>
+       <para>
+        Sets the default date style to <quote>European</quote>, that is
+       <literal>DMY</> ordering of input date fields.  This also causes
+       the day to be printed before the month in certain date output formats.
+       See <xref linkend="datatype-datetime"> for more information.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><option>-F</option></term>
       <listitem>
        <para>
@@ -264,6 +265,12 @@ PostgreSQL documentation
        linkend="app-postgres"> for possibilities.  If the option
        string contains any spaces, the entire string must be quoted.
        </para>
+
+       <para>
+        The use of this option is obsolete; all command-line options
+        for server processes can be specified directly on the
+        <command>postmaster</command> command line
+       </para>
       </listitem>
      </varlistentry>
 
@@ -285,6 +292,17 @@ PostgreSQL documentation
      </varlistentry>
 
      <varlistentry>
+      <term><option>-s</option></term>
+      <listitem>
+       <para>
+       Print time information and other statistics at the end of each command.
+       This is useful for benchmarking or for use in tuning the number of
+       buffers.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><option>-S</option></term>
       <listitem>
        <para>
@@ -318,55 +336,124 @@ PostgreSQL documentation
      </varlistentry>
 
     </variablelist>
-   </para>
+   </refsect2>
 
-   <para>
-    Two additional command line options are available for debugging
-    problems that cause a server process to die abnormally.  The
-    ordinary strategy in this situation is to notify all other server
-    processes that they must terminate and then reinitialize the
-    shared memory and semaphores.  This is because an errant server
-    process could have corrupted some shared state before terminating.
-    These options select alternative behaviors of the
-    <command>postmaster</command> in this situation.
-    <emphasis>Neither option is intended for use in ordinary
-    operation.</emphasis>
-   </para>
+   <refsect2>
+    <title>Semi-internal Options</title>
 
-   <para>
-   </para>
-
-   <para>
-    These special-case options are:
+    <para>
+     There are several other options that may be specified, used
+     mainly for debugging purposes and in some cases to assist with
+     recovery of severely damaged databases. There should be no reason
+     to use them in a production database setup.  These are listed
+     here only for the use by <productname>PostgreSQL</productname>
+     system developers.  <emphasis>Use of any of these options is
+     highly discouraged.</emphasis>  Furthermore, any of these options
+     may disappear or change in a future release without notice.
+    </para>
 
     <variablelist>
      <varlistentry>
+      <term><option>-f</option> <literal>{ s | i | m | n | h }</literal></term>
+      <listitem>
+       <para>
+       Forbids the use of particular scan and join methods:
+       <literal>s</literal> and <literal>i</literal>
+       disable sequential and index scans respectively, while
+       <literal>n</literal>, <literal>m</literal>, and <literal>h</literal>
+       disable nested-loop, merge and hash joins respectively.
+       </para>
+       
+       <para>
+        Neither sequential scans nor nested-loop joins can be disabled
+        completely; the <literal>-fs</literal> and
+        <literal>-fn</literal> options simply discourage the optimizer
+        from using those plan types if it has any other alternative.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><option>-n</option></term>
       <listitem>
        <para>
-       <command>postmaster</command>
-       will not reinitialize shared data structures.  A knowledgeable system
-       programmer can then use a debugger
-       to examine shared memory and semaphore state.
+        This option is for debugging problems that cause a server
+        process to die abnormally.  The ordinary strategy in this
+        situation is to notify all other server processes that they
+        must terminate and then reinitialize the shared memory and
+        semaphores.  This is because an errant server process could
+        have corrupted some shared state before terminating.  This
+        option specifies that the <command>postmaster</command> will
+        not reinitialize shared data structures.  A knowledgeable
+        system programmer can then use a debugger to examine shared
+        memory and semaphore state.
        </para>
      </listitem>
     </varlistentry>
 
-    <varlistentry>
-      <term><option>-s</option></term>
+     <varlistentry>
+      <term><option>-O</option></term>
       <listitem>
        <para>
-       <command>postmaster</command>
-       will stop all other server processes by sending the signal
-       <literal>SIGSTOP</literal>,
-       but will not cause them to terminate.  This permits system programmers
-       to collect core dumps from all server processes by hand.
+       Allows the structure of system tables to be modified.  This is
+       used by <command>initdb</command>.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+      <term><option>-P</option></term>
+      <listitem>
+       <para>
+       Ignore system indexes when reading system tables (but still update
+       the indexes when modifying the tables).  This is useful when
+       recovering from damaged system indexes.
        </para>
       </listitem>
      </varlistentry>
-    </variablelist>
-   </para>
 
+     <varlistentry>
+      <term><option>-t</option> <literal>pa[rser] | pl[anner] | e[xecutor]</literal></term>
+      <listitem>
+       <para>
+       Print timing statistics for each query relating to each of the
+       major system modules.  This option cannot be used together
+       with the <option>-s</option> option.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+      <term><option>-T</option></term>
+      <listitem>
+       <para>
+        This option is for debugging problems that cause a server
+        process to die abnormally.  The ordinary strategy in this
+        situation is to notify all other server processes that they
+        must terminate and then reinitialize the shared memory and
+        semaphores.  This is because an errant server process could
+        have corrupted some shared state before terminating.  This
+        option specifies that the <command>postmaster</command> will
+        stop all other server processes by sending the signal
+        <literal>SIGSTOP</literal>, but will not cause them to
+        terminate.  This permits system programmers to collect core
+        dumps from all server processes by hand.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+      <term><option>-W</option> <replaceable class="parameter">seconds</replaceable></term>
+      <listitem>
+       <para>
+        A delay of this many seconds occurs when a new server process
+        is started, after it conducts the authentication procedure.
+        This is intended to give an opportunity to attach to the
+        server process with a debugger.
+       </para>
+      </listitem>
+     </varlistentry>
+    </variablelist>
  </refsect1>
 
  <refsect1>
index 6ca2fe5..3b840d2 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/access/index/genam.c,v 1.52 2005/12/03 05:51:00 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/access/index/genam.c,v 1.53 2006/01/05 10:07:44 petere Exp $
  *
  * NOTES
  *       many of the old access method routines have been turned into
@@ -185,7 +185,7 @@ systable_beginscan(Relation heapRelation,
        Relation        irel;
 
        if (indexOK &&
-               !IsIgnoringSystemIndexes() &&
+               !IgnoreSystemIndexes &&
                !ReindexIsProcessingIndex(indexId))
                irel = index_open(indexId);
        else
index 66cf4c4..68dd732 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.210 2006/01/04 21:06:30 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.211 2006/01/05 10:07:44 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -255,10 +255,13 @@ BootstrapMain(int argc, char *argv[])
                argc--;
        }
 
-       while ((flag = getopt(argc, argv, "B:c:d:D:Fo:p:x:-:")) != -1)
+       while ((flag = getopt(argc, argv, "B:c:d:D:Fr:x:y:-:")) != -1)
        {
                switch (flag)
                {
+                       case 'B':
+                               SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
                        case 'D':
                                userDoption = optarg;
                                break;
@@ -278,18 +281,15 @@ BootstrapMain(int argc, char *argv[])
                        case 'F':
                                SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
                                break;
-                       case 'o':
+                       case 'r':
                                StrNCpy(OutputFileName, optarg, MAXPGPATH);
                                break;
                        case 'x':
                                xlogop = atoi(optarg);
                                break;
-                       case 'p':
+                       case 'y':
                                dbname = strdup(optarg);
                                break;
-                       case 'B':
-                               SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV);
-                               break;
                        case 'c':
                        case '-':
                                {
@@ -376,7 +376,7 @@ BootstrapMain(int argc, char *argv[])
                CreateDataDirLockFile(false);
 
        SetProcessingMode(BootstrapProcessing);
-       IgnoreSystemIndexes(true);
+       IgnoreSystemIndexes = true;
 
        BaseInit();
 
@@ -499,14 +499,16 @@ BootstrapMain(int argc, char *argv[])
 static void
 usage(void)
 {
-       write_stderr("Usage:\n"
-                                "  postgres -boot [OPTION]... DBNAME\n"
-                                "  -c NAME=VALUE    set run-time parameter\n"
-                                "  -d 1-5           debug level\n"
-                                "  -D datadir       data directory\n"
-                                "  -F               turn off fsync\n"
-                                "  -o file          send debug output to file\n"
-                                "  -x num           internal use\n");
+       fprintf(stderr, _("This is the PostgreSQL bootstrap process.\n\n"));
+       fprintf(stderr, _("Usage:\n  postgres -boot [OPTION]... DBNAME\n\n"));
+       fprintf(stderr, _("Options:\n"));
+       fprintf(stderr, _("  -B NBUFFERS     number of shared buffers\n"));
+       fprintf(stderr, _("  -c NAME=VALUE   set run-time parameter\n"));
+       fprintf(stderr, _("  -d 1-5          debugging level\n"));
+       fprintf(stderr, _("  -D DATADIR      database directory\n"));
+       fprintf(stderr, _("  -F              turn fsync off\n"));
+       fprintf(stderr, _("  -r FILENAME     send stdout and stderr to given file\n"));
+       fprintf(stderr, _("  -x NUM          internal use\n"));
 
        proc_exit(1);
 }
index e9ac17d..8a5888a 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.197 2005/11/22 18:17:09 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.198 2006/01/05 10:07:45 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -845,7 +845,7 @@ RelationBuildTriggers(Relation relation)
        /*
         * Note: since we scan the triggers using TriggerRelidNameIndexId, we will
         * be reading the triggers in name order, except possibly during
-        * emergency-recovery operations (ie, IsIgnoringSystemIndexes). This in
+        * emergency-recovery operations (ie, IgnoreSystemIndexes). This in
         * turn ensures that triggers will be fired in name order.
         */
        ScanKeyInit(&skey,
index ec753de..d9a9fdb 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/optimizer/util/plancat.c,v 1.115 2005/11/22 18:17:14 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/optimizer/util/plancat.c,v 1.116 2006/01/05 10:07:45 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -107,7 +107,7 @@ get_relation_info(Oid relationObjectId, RelOptInfo *rel)
        /*
         * Make list of indexes.  Ignore indexes on system catalogs if told to.
         */
-       if (IsIgnoringSystemIndexes() && IsSystemClass(relation->rd_rel))
+       if (IgnoreSystemIndexes && IsSystemClass(relation->rd_rel))
                hasindex = false;
        else
                hasindex = relation->rd_rel->relhasindex;
index 187bfeb..31d370e 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.477 2006/01/04 21:06:31 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.478 2006/01/05 10:07:45 petere Exp $
  *
  * NOTES
  *
@@ -432,8 +432,6 @@ PostmasterMain(int argc, char *argv[])
                                                                                          ALLOCSET_DEFAULT_MAXSIZE);
        MemoryContextSwitchTo(PostmasterContext);
 
-       IgnoreSystemIndexes(false);
-
        if (find_my_exec(argv[0], my_exec_path) < 0)
                elog(FATAL, "%s: could not locate my own executable path",
                         argv[0]);
@@ -447,90 +445,108 @@ PostmasterMain(int argc, char *argv[])
 
        opterr = 1;
 
-       while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != -1)
+       while ((opt = getopt(argc, argv, "A:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:W:-:")) != -1)
        {
                switch (opt)
                {
                        case 'A':
-#ifdef USE_ASSERT_CHECKING
                                SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, PGC_S_ARGV);
-#else
-                               write_stderr("%s: assert checking is not compiled in\n", progname);
-#endif
-                               break;
-                       case 'a':
-                               /* Can no longer set authentication method. */
                                break;
+
                        case 'B':
                                SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                                break;
-                       case 'b':
-                               /* Can no longer set the backend executable file to use. */
-                               break;
+
                        case 'D':
                                userDoption = optarg;
                                break;
+
                        case 'd':
                                set_debug_options(atoi(optarg), PGC_POSTMASTER, PGC_S_ARGV);
                                break;
+
+                       case 'E':
+                               SetConfigOption("log_statement", "all", PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
+
+                       case 'e':
+                               SetConfigOption("datestyle", "euro", PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
+
                        case 'F':
                                SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
                                break;
+
+                       case 'f':
+                               if (!set_plan_disabling_options(optarg, PGC_POSTMASTER, PGC_S_ARGV))
+                               {
+                                       write_stderr("%s: invalid argument for option -f: \"%s\"\n",
+                                                                progname, optarg);
+                                       ExitPostmaster(1);
+                               }
+                               break;
+
                        case 'h':
                                SetConfigOption("listen_addresses", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                                break;
+
                        case 'i':
                                SetConfigOption("listen_addresses", "*", PGC_POSTMASTER, PGC_S_ARGV);
                                break;
+
+                       case 'j':
+                               /* only used by interactive backend */
+                               break;
+
                        case 'k':
                                SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                                break;
-#ifdef USE_SSL
+
                        case 'l':
                                SetConfigOption("ssl", "true", PGC_POSTMASTER, PGC_S_ARGV);
                                break;
-#endif
-                       case 'm':
-                               /* Multiplexed backends no longer supported. */
-                               break;
-                       case 'M':
 
-                               /*
-                                * ignore this flag.  This may be passed in because the
-                                * program was run as 'postgres -M' instead of 'postmaster'
-                                */
-                               break;
                        case 'N':
-                               /* The max number of backends to start. */
                                SetConfigOption("max_connections", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                                break;
+
                        case 'n':
                                /* Don't reinit shared mem after abnormal exit */
                                Reinit = false;
                                break;
-                       case 'o':
 
-                               /*
-                                * Other options to pass to the backend on the command line
-                                */
+                       case 'O':
+                               SetConfigOption("allow_system_table_mods", "true", PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
+
+                       case 'o':
+                               /* Other options to pass to the backend on the command line */
                                snprintf(ExtraOptions + strlen(ExtraOptions),
                                                 sizeof(ExtraOptions) - strlen(ExtraOptions),
                                                 " %s", optarg);
                                break;
+
+                       case 'P':
+                               SetConfigOption("ignore_system_indexes", "true", PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
+
                        case 'p':
                                SetConfigOption("port", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                                break;
-                       case 'S':
 
-                               /*
-                                * Start in 'S'ilent mode (disassociate from controlling tty).
-                                * You may also think of this as 'S'ysV mode since it's most
-                                * badly needed on SysV-derived systems like SVR4 and HP-UX.
-                                */
-                               SetConfigOption("silent_mode", "true", PGC_POSTMASTER, PGC_S_ARGV);
+                       case 'r':
+                               /* only used by single-user backend */
+                               break;
+
+                       case 'S':
+                               SetConfigOption("work_mem", optarg, PGC_POSTMASTER, PGC_S_ARGV);
                                break;
+
                        case 's':
+                               SetConfigOption("log_statement_stats", optarg, PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
 
+                       case 'T':
                                /*
                                 * In the event that some backend dumps core, send SIGSTOP,
                                 * rather than SIGQUIT, to all its peers.  This lets the wily
@@ -538,6 +554,28 @@ PostmasterMain(int argc, char *argv[])
                                 */
                                SendStop = true;
                                break;
+
+                       case 't':
+                       {
+                               const char *tmp = get_stats_option_name(optarg);
+
+                               if (tmp)
+                               {
+                                       SetConfigOption(tmp, "true", PGC_POSTMASTER, PGC_S_ARGV);
+                               }
+                               else
+                               {
+                                       write_stderr("%s: invalid argument for option -t: \"%s\"\n",
+                                                                progname, optarg);
+                                       ExitPostmaster(1);
+                               }
+                               break;
+                       }
+
+                       case 'W':
+                               SetConfigOption("post_auth_delay", optarg, PGC_POSTMASTER, PGC_S_ARGV);
+                               break;
+
                        case 'c':
                        case '-':
                                {
@@ -1113,6 +1151,7 @@ usage(const char *progname)
        printf(_("  -c NAME=VALUE   set run-time parameter\n"));
        printf(_("  -d 1-5          debugging level\n"));
        printf(_("  -D DATADIR      database directory\n"));
+       printf(_("  -e              use European date input format (DMY)\n"));
        printf(_("  -F              turn fsync off\n"));
        printf(_("  -h HOSTNAME     host name or IP address to listen on\n"));
        printf(_("  -i              enable TCP/IP connections\n"));
@@ -1121,18 +1160,25 @@ usage(const char *progname)
        printf(_("  -l              enable SSL connections\n"));
 #endif
        printf(_("  -N MAX-CONNECT  maximum number of allowed connections\n"));
-       printf(_("  -o OPTIONS      pass \"OPTIONS\" to each server process\n"));
+       printf(_("  -o OPTIONS      pass \"OPTIONS\" to each server process (obsolete)\n"));
        printf(_("  -p PORT         port number to listen on\n"));
-       printf(_("  -S              silent mode (start in background without logging output)\n"));
+       printf(_("  -s              show statistics after each query\n"));
+       printf(_("  -S WORK-MEM     set amount of memory for sorts (in kB)\n"));
+       printf(_("  --NAME=VALUE    set run-time parameter\n"));
        printf(_("  --help          show this help, then exit\n"));
        printf(_("  --version       output version information, then exit\n"));
 
        printf(_("\nDeveloper options:\n"));
+       printf(_("  -f s|i|n|m|h    forbid use of some plan types\n"));
        printf(_("  -n              do not reinitialize shared memory after abnormal exit\n"));
-       printf(_("  -s              send SIGSTOP to all backend servers if one dies\n"));
+       printf(_("  -O              allow system table structure changes\n"));
+       printf(_("  -P              disable system indexes\n"));
+       printf(_("  -t pa|pl|ex     show timings after each query\n"));
+       printf(_("  -T              send SIGSTOP to all backend servers if one dies\n"));
+       printf(_("  -W NUM          wait NUM seconds to allow attach from a debugger\n"));
 
        printf(_("\nPlease read the documentation for the complete list of run-time\n"
-        "configuration settings and how to set them on the command line or in\n"
+                        "configuration settings and how to set them on the command line or in\n"
                         "the configuration file.\n\n"
                         "Report bugs to <pgsql-bugs@postgresql.org>.\n"));
 }
@@ -2797,8 +2843,8 @@ BackendRun(Port *port)
         * Now, build the argv vector that will be given to PostgresMain.
         *
         * The layout of the command line is
-        *              postgres [secure switches] -p databasename [insecure switches]
-        * where the switches after -p come from the client request.
+        *              postgres [secure switches] -y databasename [insecure switches]
+        * where the switches after -y come from the client request.
         *
         * The maximum possible number of commandline arguments that could come
         * from ExtraOptions or port->cmdline_options is (strlen + 1) / 2; see
@@ -2829,9 +2875,9 @@ BackendRun(Port *port)
 
        /*
         * Tell the backend it is being called from the postmaster, and which
-        * database to use.  -p marks the end of secure switches.
+        * database to use.  -y marks the end of secure switches.
         */
-       av[ac++] = "-p";
+       av[ac++] = "-y";
        av[ac++] = port->database_name;
 
        /*
@@ -3575,7 +3621,7 @@ StartChildProcess(int xlop)
        snprintf(xlbuf, sizeof(xlbuf), "-x%d", xlop);
        av[ac++] = xlbuf;
 
-       av[ac++] = "-p";
+       av[ac++] = "-y";
        av[ac++] = "template1";
 
        av[ac] = NULL;
index 8f28ce6..e38e66a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.476 2006/01/05 03:01:35 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.477 2006/01/05 10:07:45 petere Exp $
  *
  * NOTES
  *       this is the "main" module of the postgres backend and
@@ -84,6 +84,10 @@ LogStmtLevel log_statement = LOGSTMT_NONE;
 /* GUC variable for maximum stack depth (measured in kilobytes) */
 int                    max_stack_depth = 2048;
 
+/* wait N seconds to allow attach from a debugger */
+int                    PostAuthDelay = 0;
+
+
 
 /* ----------------
  *             private variables
@@ -2338,30 +2342,30 @@ usage(const char *progname)
 {
        printf(_("%s is the PostgreSQL stand-alone backend.  It is not\nintended to be used by normal users.\n\n"), progname);
 
-       printf(_("Usage:\n  %s [OPTION]... [DBNAME]\n\n"), progname);
+       printf(_("Usage:\n  %s [OPTION]... DBNAME\n\n"), progname);
        printf(_("Options:\n"));
 #ifdef USE_ASSERT_CHECKING
        printf(_("  -A 1|0          enable/disable run-time assert checking\n"));
 #endif
        printf(_("  -B NBUFFERS     number of shared buffers\n"));
        printf(_("  -c NAME=VALUE   set run-time parameter\n"));
-       printf(_("  -d 0-5          debugging level (0 is off)\n"));
+       printf(_("  -d 0-5          debugging level\n"));
        printf(_("  -D DATADIR      database directory\n"));
        printf(_("  -e              use European date input format (DMY)\n"));
-       printf(_("  -E              echo query before execution\n"));
+       printf(_("  -E              echo statement before execution\n"));
        printf(_("  -F              turn fsync off\n"));
-       printf(_("  -N              do not use newline as interactive query delimiter\n"));
-       printf(_("  -o FILENAME     send stdout and stderr to given file\n"));
-       printf(_("  -P              disable system indexes\n"));
+       printf(_("  -j              do not use newline as interactive query delimiter\n"));
+       printf(_("  -r FILENAME     send stdout and stderr to given file\n"));
        printf(_("  -s              show statistics after each query\n"));
        printf(_("  -S WORK-MEM     set amount of memory for sorts (in kB)\n"));
+       printf(_("  --NAME=VALUE    set run-time parameter\n"));
        printf(_("  --describe-config  describe configuration parameters, then exit\n"));
        printf(_("  --help          show this help, then exit\n"));
        printf(_("  --version       output version information, then exit\n"));
        printf(_("\nDeveloper options:\n"));
        printf(_("  -f s|i|n|m|h    forbid use of some plan types\n"));
-       printf(_("  -i              do not execute queries\n"));
        printf(_("  -O              allow system table structure changes\n"));
+       printf(_("  -P              disable system indexes\n"));
        printf(_("  -t pa|pl|ex     show timings after each query\n"));
        printf(_("  -W NUM          wait NUM seconds to allow attach from a debugger\n"));
        printf(_("\nReport bugs to <pgsql-bugs@postgresql.org>.\n"));
@@ -2403,6 +2407,66 @@ set_debug_options(int debug_flag, GucContext context, GucSource source)
 }
 
 
+bool
+set_plan_disabling_options(const char *arg, GucContext context, GucSource source)
+{
+       char *tmp = NULL;
+
+       switch (arg[0])
+       {
+               case 's':       /* seqscan */
+                       tmp = "enable_seqscan";
+                       break;
+               case 'i':       /* indexscan */
+                       tmp = "enable_indexscan";
+                       break;
+               case 'b':       /* bitmapscan */
+                       tmp = "enable_bitmapscan";
+                       break;
+               case 't':       /* tidscan */
+                       tmp = "enable_tidscan";
+                       break;
+               case 'n':       /* nestloop */
+                       tmp = "enable_nestloop";
+                       break;
+               case 'm':       /* mergejoin */
+                       tmp = "enable_mergejoin";
+                       break;
+               case 'h':       /* hashjoin */
+                       tmp = "enable_hashjoin";
+                       break;
+       }
+       if (tmp)
+       {
+               SetConfigOption(tmp, "false", context, source);
+               return true;
+       }
+       else
+               return false;
+}
+
+
+const char *
+get_stats_option_name(const char *arg)
+{
+       switch (arg[0])
+       {
+               case 'p':
+                       if (optarg[1] == 'a') /* "parser" */
+                               return "log_parser_stats";
+                       else if (optarg[1] == 'l') /* "planner" */
+                               return "log_planner_stats";
+                       break;
+
+               case 'e':       /* "executor" */
+                       return "log_executor_stats";
+                       break;
+       }
+
+       return NULL;
+}
+
+
 /* ----------------------------------------------------------------
  * PostgresMain
  *        postgres main loop -- all backends, interactive or otherwise start here
@@ -2427,7 +2491,6 @@ PostgresMain(int argc, char *argv[], const char *username)
        GucContext      ctx;
        GucSource       gucsource;
        bool            am_superuser;
-       char       *tmp;
        int                     firstchar;
        char            stack_base;
        StringInfoData input_message;
@@ -2518,164 +2581,100 @@ PostgresMain(int argc, char *argv[], const char *username)
        ctx = PGC_POSTMASTER;
        gucsource = PGC_S_ARGV;         /* initial switches came from command line */
 
-       while ((flag = getopt(argc, argv, "A:B:c:D:d:Eef:FiNOPo:p:S:st:v:W:-:")) != -1)
+       while ((flag = getopt(argc, argv, "A:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:v:W:y:-:")) != -1)
        {
                switch (flag)
                {
                        case 'A':
-#ifdef USE_ASSERT_CHECKING
                                SetConfigOption("debug_assertions", optarg, ctx, gucsource);
-#else
-                               ereport(WARNING,
-                                               (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                                                errmsg("assert checking is not compiled in")));
-#endif
                                break;
 
                        case 'B':
-
-                               /*
-                                * specify the size of buffer pool
-                                */
                                SetConfigOption("shared_buffers", optarg, ctx, gucsource);
                                break;
 
-                       case 'D':                       /* PGDATA or config directory */
+                       case 'D':
                                if (secure)
                                        userDoption = optarg;
                                break;
 
-                       case 'd':                       /* debug level */
+                       case 'd':
                                debug_flag = atoi(optarg);
                                break;
 
                        case 'E':
-
-                               /*
-                                * E - echo the query the user entered
-                                */
                                EchoQuery = true;
                                break;
 
                        case 'e':
-
-                               /*
-                                * Use European date input format (DMY)
-                                */
                                SetConfigOption("datestyle", "euro", ctx, gucsource);
                                break;
 
                        case 'F':
-
-                               /*
-                                * turn off fsync
-                                */
                                SetConfigOption("fsync", "false", ctx, gucsource);
                                break;
 
                        case 'f':
+                               if (!set_plan_disabling_options(optarg, ctx, gucsource))
+                                       errs++;
+                               break;
 
-                               /*
-                                * f - forbid generation of certain plans
-                                */
-                               tmp = NULL;
-                               switch (optarg[0])
-                               {
-                                       case 's':       /* seqscan */
-                                               tmp = "enable_seqscan";
-                                               break;
-                                       case 'i':       /* indexscan */
-                                               tmp = "enable_indexscan";
-                                               break;
-                                       case 'b':       /* bitmapscan */
-                                               tmp = "enable_bitmapscan";
-                                               break;
-                                       case 't':       /* tidscan */
-                                               tmp = "enable_tidscan";
-                                               break;
-                                       case 'n':       /* nestloop */
-                                               tmp = "enable_nestloop";
-                                               break;
-                                       case 'm':       /* mergejoin */
-                                               tmp = "enable_mergejoin";
-                                               break;
-                                       case 'h':       /* hashjoin */
-                                               tmp = "enable_hashjoin";
-                                               break;
-                                       default:
-                                               errs++;
-                               }
-                               if (tmp)
-                                       SetConfigOption(tmp, "false", ctx, gucsource);
+                       case 'h':
+                               SetConfigOption("listen_addresses", optarg, ctx, gucsource);
                                break;
 
-                       case 'N':
+                       case 'i':
+                               SetConfigOption("listen_addresses", "*", ctx, gucsource);
+                               break;
 
-                               /*
-                                * N - Don't use newline as a query delimiter
-                                */
+                       case 'j':
                                UseNewLine = 0;
                                break;
 
-                       case 'O':
+                       case 'k':
+                               SetConfigOption("unix_socket_directory", optarg, ctx, gucsource);
+                               break;
 
-                               /*
-                                * allow system table structure modifications
-                                */
-                               if (secure)             /* XXX safe to allow from client??? */
-                                       allowSystemTableMods = true;
+                       case 'l':
+                               SetConfigOption("ssl", "true", ctx, gucsource);
                                break;
 
-                       case 'P':
+                       case 'N':
+                               SetConfigOption("max_connections", optarg, ctx, gucsource);
+                               break;
 
-                               /*
-                                * ignore system indexes
-                                *
-                                * As of PG 7.4 this is safe to allow from the client, since
-                                * it only disables reading the system indexes, not writing
-                                * them. Worst case consequence is slowness.
-                                */
-                               IgnoreSystemIndexes(true);
+                       case 'n':
+                               /* ignored for consistency with postmaster */
+                               break;
+
+                       case 'O':
+                               SetConfigOption("allow_system_table_mods", "true", ctx, gucsource);
                                break;
 
                        case 'o':
+                               errs++;
+                               break;
 
-                               /*
-                                * o - send output (stdout and stderr) to the given file
-                                */
-                               if (secure)
-                                       StrNCpy(OutputFileName, optarg, MAXPGPATH);
+                       case 'P':
+                               SetConfigOption("ignore_system_indexes", "true", ctx, gucsource);
                                break;
 
                        case 'p':
+                               SetConfigOption("port", optarg, ctx, gucsource);
+                               break;
 
-                               /*
-                                * p - special flag passed if backend was forked by a
-                                * postmaster.
-                                */
+                       case 'r':
+                               /* send output (stdout and stderr) to the given file */
                                if (secure)
-                               {
-                                       dbname = strdup(optarg);
-
-                                       secure = false;         /* subsequent switches are NOT secure */
-                                       ctx = PGC_BACKEND;
-                                       gucsource = PGC_S_CLIENT;
-                               }
+                                       StrNCpy(OutputFileName, optarg, MAXPGPATH);
                                break;
 
                        case 'S':
-
-                               /*
-                                * S - amount of sort memory to use in 1k bytes
-                                */
                                SetConfigOption("work_mem", optarg, ctx, gucsource);
                                break;
 
                        case 's':
-
                                /*
-                                * s - report usage statistics (timings) after each query
-                                *
                                 * Since log options are SUSET, we need to postpone unless
                                 * still in secure context
                                 */
@@ -2686,35 +2685,13 @@ PostgresMain(int argc, char *argv[], const char *username)
                                                                        ctx, gucsource);
                                break;
 
+                       case 'T':
+                               /* ignored for consistency with postmaster */
+                               break;
+
                        case 't':
-                               /* ---------------
-                                *      tell postgres to report usage statistics (timings) for
-                                *      each query
-                                *
-                                *      -tpa[rser] = print stats for parser time of each query
-                                *      -tpl[anner] = print stats for planner time of each query
-                                *      -te[xecutor] = print stats for executor time of each query
-                                *      caution: -s can not be used together with -t.
-                                * ----------------
-                                */
-                               tmp = NULL;
-                               switch (optarg[0])
-                               {
-                                       case 'p':
-                                               if (optarg[1] == 'a')
-                                                       tmp = "log_parser_stats";
-                                               else if (optarg[1] == 'l')
-                                                       tmp = "log_planner_stats";
-                                               else
-                                                       errs++;
-                                               break;
-                                       case 'e':
-                                               tmp = "log_executor_stats";
-                                               break;
-                                       default:
-                                               errs++;
-                                               break;
-                               }
+                       {
+                               const char *tmp = get_stats_option_name(optarg);
                                if (tmp)
                                {
                                        if (ctx == PGC_BACKEND)
@@ -2722,7 +2699,10 @@ PostgresMain(int argc, char *argv[], const char *username)
                                        else
                                                SetConfigOption(tmp, "true", ctx, gucsource);
                                }
+                               else
+                                       errs++;
                                break;
+                       }
 
                        case 'v':
                                if (secure)
@@ -2730,11 +2710,23 @@ PostgresMain(int argc, char *argv[], const char *username)
                                break;
 
                        case 'W':
+                               SetConfigOption("post_auth_delay", optarg, ctx, gucsource);
+                               break;
 
+
+                       case 'y':
                                /*
-                                * wait N seconds to allow attach from a debugger
+                                * y - special flag passed if backend was forked by a
+                                * postmaster.
                                 */
-                               pg_usleep(atoi(optarg) * 1000000L);
+                               if (secure)
+                               {
+                                       dbname = strdup(optarg);
+
+                                       secure = false;         /* subsequent switches are NOT secure */
+                                       ctx = PGC_BACKEND;
+                                       gucsource = PGC_S_CLIENT;
+                               }
                                break;
 
                        case 'c':
@@ -2813,6 +2805,9 @@ PostgresMain(int argc, char *argv[], const char *username)
                pg_timezone_initialize();
        }
 
+       if (PostAuthDelay)
+               pg_usleep(PostAuthDelay * 1000000L);
+
        /*
         * Set up signal handlers and masks.
         *
index 9854291..216f1c8 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.233 2005/12/09 01:22:04 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.234 2006/01/05 10:07:46 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -551,7 +551,7 @@ RelationBuildRuleLock(Relation relation)
         *
         * Note: since we scan the rules using RewriteRelRulenameIndexId, we will
         * be reading the rules in name order, except possibly during
-        * emergency-recovery operations (ie, IsIgnoringSystemIndexes). This in
+        * emergency-recovery operations (ie, IgnoreSystemIndexes). This in
         * turn ensures that rules will be fired in name order.
         */
        rewrite_desc = heap_open(RewriteRelationId, AccessShareLock);
index 5dd8a62..f75d013 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.152 2006/01/05 03:01:36 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.153 2006/01/05 10:07:46 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -62,27 +62,7 @@ static char socketLockFile[MAXPGPATH];
  * ----------------------------------------------------------------
  */
 
-static bool isIgnoringSystemIndexes = false;
-
-/*
- * IsIgnoringSystemIndexes
- *             True if ignoring system indexes.
- */
-bool
-IsIgnoringSystemIndexes(void)
-{
-       return isIgnoringSystemIndexes;
-}
-
-/*
- * IgnoreSystemIndexes
- *             Set true or false whether PostgreSQL ignores system indexes.
- */
-void
-IgnoreSystemIndexes(bool mode)
-{
-       isIgnoringSystemIndexes = mode;
-}
+bool IgnoreSystemIndexes = false;
 
 /* ----------------------------------------------------------------
  *             system index reindexing support
index 124d260..ffd49da 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.305 2005/12/30 00:13:50 petere Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.306 2006/01/05 10:07:46 petere Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -130,6 +130,7 @@ static const char *show_num_temp_buffers(void);
 static bool assign_phony_autocommit(bool newval, bool doit, GucSource source);
 static const char *assign_custom_variable_classes(const char *newval, bool doit,
                                                           GucSource source);
+static bool assign_debug_assertions(bool newval, bool doit, GucSource source);
 static bool assign_ssl(bool newval, bool doit, GucSource source);
 static bool assign_stage_log_stats(bool newval, bool doit, GucSource source);
 static bool assign_log_stats(bool newval, bool doit, GucSource source);
@@ -316,7 +317,7 @@ const char *const config_group_names[] =
        /* STATS_COLLECTOR */
        gettext_noop("Statistics / Query and Index Statistics Collector"),
        /* AUTOVACUUM */
-       gettext_noop("Auto Vacuum"),
+       gettext_noop("Autovacuum"),
        /* CLIENT_CONN */
        gettext_noop("Client Connection Defaults"),
        /* CLIENT_CONN_STATEMENT */
@@ -560,8 +561,6 @@ static struct config_bool ConfigureNamesBool[] =
                &Log_disconnections,
                false, NULL, NULL
        },
-
-#ifdef USE_ASSERT_CHECKING
        {
                {"debug_assertions", PGC_USERSET, DEVELOPER_OPTIONS,
                        gettext_noop("Turns on various assertion checks."),
@@ -569,10 +568,13 @@ static struct config_bool ConfigureNamesBool[] =
                        GUC_NOT_IN_SAMPLE
                },
                &assert_enabled,
-               true, NULL, NULL
-       },
+#ifdef USE_ASSERT_CHECKING
+               true,
+#else
+               false,
 #endif
-
+               assign_debug_assertions, NULL
+       },
        {
                /* currently undocumented, so don't show in SHOW ALL */
                {"exit_on_error", PGC_USERSET, UNGROUPED,
@@ -978,6 +980,27 @@ static struct config_bool ConfigureNamesBool[] =
                false, NULL, NULL
        },
 
+       {
+               {"allow_system_table_mods", PGC_BACKEND, DEVELOPER_OPTIONS,
+                gettext_noop("Allows modifications of the structure of system tables."),
+                NULL,
+                GUC_NOT_IN_SAMPLE
+               },
+               &allowSystemTableMods,
+               false, NULL, NULL
+       },
+
+       {
+               {"ignore_system_indexes", PGC_BACKEND, DEVELOPER_OPTIONS,
+                gettext_noop("Disabled reading from system indexes."),
+                gettext_noop("It does not prevent updating the indexes, so it is safe "
+                                         "to use.  The worst consequence is slowness."),
+                GUC_NOT_IN_SAMPLE
+               },
+               &IgnoreSystemIndexes,
+               false, NULL, NULL
+       },
+
        /* End-of-list marker */
        {
                {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
@@ -988,6 +1011,15 @@ static struct config_bool ConfigureNamesBool[] =
 static struct config_int ConfigureNamesInt[] =
 {
        {
+               {"post_auth_delay", PGC_BACKEND, DEVELOPER_OPTIONS,
+                gettext_noop("Waits N seconds on connection startup after authentication."),
+                gettext_noop("This allows attaching a debugger to the process."),
+                GUC_NOT_IN_SAMPLE
+               },
+               &PostAuthDelay,
+               0, 0, INT_MAX, NULL, NULL
+       },
+       {
                {"default_statistics_target", PGC_USERSET, QUERY_TUNING_OTHER,
                        gettext_noop("Sets the default statistics target."),
                        gettext_noop("This applies to table columns that have not had a "
@@ -5866,6 +5898,18 @@ assign_custom_variable_classes(const char *newval, bool doit, GucSource source)
 }
 
 static bool
+assign_debug_assertions(bool newval, bool doit, GucSource source)
+{
+#ifndef USE_ASSERT_CHECKING
+       if (newval)
+               ereport(ERROR,
+                               (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+                                errmsg("assertion checking is not supported by this build")));
+#endif
+       return true;
+}
+
+static bool
 assign_ssl(bool newval, bool doit, GucSource source)
 {
 #ifndef USE_SSL
index 8aecb08..367b308 100644 (file)
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.105 2006/01/05 03:01:36 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.106 2006/01/05 10:07:46 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1686,10 +1686,10 @@ setup_sysviews(void)
        sysviews_setup = readfile(system_views_file);
 
        /*
-        * We use -N here to avoid backslashing stuff in system_views.sql
+        * We use -j here to avoid backslashing stuff in system_views.sql
         */
        snprintf(cmd, sizeof(cmd),
-                        "\"%s\" %s -N template1 >%s",
+                        "\"%s\" %s -j template1 >%s",
                         backend_exec, backend_options,
                         DEVNULL);
 
@@ -1870,10 +1870,10 @@ setup_schema(void)
        lines = readfile(info_schema_file);
 
        /*
-        * We use -N here to avoid backslashing stuff in information_schema.sql
+        * We use -j here to avoid backslashing stuff in information_schema.sql
         */
        snprintf(cmd, sizeof(cmd),
-                        "\"%s\" %s -N template1 >%s",
+                        "\"%s\" %s -j template1 >%s",
                         backend_exec, backend_options,
                         DEVNULL);
 
index e354b81..ce56c22 100644 (file)
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.184 2005/11/22 18:17:29 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.185 2006/01/05 10:07:46 petere Exp $
  *
  * NOTES
  *       some of the information in this file should be moved to other files.
@@ -306,8 +306,7 @@ extern bool InitPostgres(const char *dbname, const char *username);
 extern void BaseInit(void);
 
 /* in utils/init/miscinit.c */
-extern void IgnoreSystemIndexes(bool mode);
-extern bool IsIgnoringSystemIndexes(void);
+extern bool IgnoreSystemIndexes;
 extern void SetReindexProcessing(Oid heapOid, Oid indexOid);
 extern void ResetReindexProcessing(void);
 extern bool ReindexIsProcessingHeap(Oid heapOid);
index 1f03f54..ebcfec2 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.78 2005/10/15 02:49:46 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.79 2006/01/05 10:07:46 petere Exp $
  *
  * OLD COMMENTS
  *       This file was created so that other c files could get the two
@@ -28,6 +28,7 @@
 extern CommandDest whereToSendOutput;
 extern DLLIMPORT const char *debug_query_string;
 extern int     max_stack_depth;
+extern int     PostAuthDelay;
 
 /* GUC-configurable parameters */
 
@@ -67,5 +68,8 @@ extern void ResetUsage(void);
 extern void ShowUsage(const char *title);
 extern void set_debug_options(int debug_flag,
                                  GucContext context, GucSource source);
+extern bool set_plan_disabling_options(const char *arg,
+                                                                         GucContext context, GucSource source);
+extern const char *get_stats_option_name(const char *arg);
 
 #endif   /* TCOPPROT_H */