default to WITHOUT OIDS - Mailing list pgsql-patches

From Neil Conway
Subject default to WITHOUT OIDS
Date
Msg-id 42313BAE.6090903@samurai.com
Whole thread Raw
Responses Re: default to WITHOUT OIDS
List pgsql-patches
This patch makes default_with_oids disabled by default, per earlier
discussion, and updates the documentation accordingly. I might have
missed a few spots in the documentation that implicitly assume that OIDs
are present in user tables by default, but I think I got most of them.

Barring any objections, I'll apply this on Monday.

-Neil
Index: doc/src/sgml/datatype.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/datatype.sgml,v
retrieving revision 1.155
diff -c -r1.155 datatype.sgml
*** doc/src/sgml/datatype.sgml    22 Jan 2005 22:56:35 -0000    1.155
--- doc/src/sgml/datatype.sgml    11 Mar 2005 05:35:45 -0000
***************
*** 2980,2989 ****
     <para>
      Object identifiers (OIDs) are used internally by
      <productname>PostgreSQL</productname> as primary keys for various
!     system tables.  An OID system column is also added to user-created
!     tables, unless <literal>WITHOUT OIDS</literal> is specified when
!     the table is created, or the <xref linkend="guc-default-with-oids">
!     configuration variable is set to false.  Type <type>oid</>
      represents an object identifier.  There are also several alias
      types for <type>oid</>: <type>regproc</>, <type>regprocedure</>,
      <type>regoper</>, <type>regoperator</>, <type>regclass</>, and
--- 2980,2989 ----
     <para>
      Object identifiers (OIDs) are used internally by
      <productname>PostgreSQL</productname> as primary keys for various
!     system tables.  OIDs are not added to user-created tables, unless
!     <literal>WITH OIDS</literal> is specified when the table is
!     created, or the <xref linkend="guc-default-with-oids">
!     configuration variable is set to true.  Type <type>oid</>
      represents an object identifier.  There are also several alias
      types for <type>oid</>: <type>regproc</>, <type>regprocedure</>,
      <type>regoper</>, <type>regoperator</>, <type>regclass</>, and
***************
*** 3000,3027 ****
      references to system tables.
     </para>

-    <note>
-     <para>
-      OIDs are included by default in user-created tables in
-      <productname>PostgreSQL</productname> &version;. However, this
-      behavior is likely to change in a future version of
-      <productname>PostgreSQL</productname>. Eventually, user-created
-      tables will not include an OID system column unless <literal>WITH
-      OIDS</literal> is specified when the table is created, or the
-      <varname>default_with_oids</varname> configuration variable is set
-      to true. If your application requires the presence of an OID
-      system column in a table, it should specify <literal>WITH
-      OIDS</literal> when that table is created to ensure compatibility
-      with future releases of <productname>PostgreSQL</productname>.
-     </para>
-    </note>
-
     <para>
      The <type>oid</> type itself has few operations beyond comparison.
!     It can be cast to
!     integer, however, and then manipulated using the standard integer
!     operators.  (Beware of possible signed-versus-unsigned confusion
!     if you do this.)
     </para>

     <para>
--- 3000,3010 ----
      references to system tables.
     </para>

     <para>
      The <type>oid</> type itself has few operations beyond comparison.
!     It can be cast to integer, however, and then manipulated using the
!     standard integer operators.  (Beware of possible
!     signed-versus-unsigned confusion if you do this.)
     </para>

     <para>
Index: doc/src/sgml/ddl.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/ddl.sgml,v
retrieving revision 1.39
diff -c -r1.39 ddl.sgml
*** doc/src/sgml/ddl.sgml    22 Jan 2005 22:56:35 -0000    1.39
--- doc/src/sgml/ddl.sgml    11 Mar 2005 05:41:25 -0000
***************
*** 868,878 ****
         <primary>OID</primary>
         <secondary>column</secondary>
        </indexterm>
!       The object identifier (object ID) of a row.  This is a serial
!       number that is automatically added by
!       <productname>PostgreSQL</productname> to all table rows (unless
!       the table was created using <literal>WITHOUT OIDS</literal>, in which
!       case this column is not present).  This column is of type
        <type>oid</type> (same name as the column); see <xref
        linkend="datatype-oid"> for more information about the type.
       </para>
--- 868,877 ----
         <primary>OID</primary>
         <secondary>column</secondary>
        </indexterm>
!       The object identifier (object ID) of a row. This column is only
!       present if the table was created using <literal>WITH
!       OIDS</literal>, or if the <xref linkend="guc-default-with-oids">
!       configuration variable was enabled. This column is of type
        <type>oid</type> (same name as the column); see <xref
        linkend="datatype-oid"> for more information about the type.
       </para>
Index: doc/src/sgml/plpgsql.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/plpgsql.sgml,v
retrieving revision 1.61
diff -c -r1.61 plpgsql.sgml
*** doc/src/sgml/plpgsql.sgml    14 Feb 2005 00:54:26 -0000    1.61
--- doc/src/sgml/plpgsql.sgml    11 Mar 2005 05:47:32 -0000
***************
*** 1299,1305 ****
       the <acronym>SQL</acronym> engine, and <varname>RESULT_OID</>,
       the OID of the last row inserted by the most recent
       <acronym>SQL</acronym> command.  Note that <varname>RESULT_OID</>
!      is only useful after an <command>INSERT</command> command.
      </para>

      <para>
--- 1299,1306 ----
       the <acronym>SQL</acronym> engine, and <varname>RESULT_OID</>,
       the OID of the last row inserted by the most recent
       <acronym>SQL</acronym> command.  Note that <varname>RESULT_OID</>
!      is only useful after an <command>INSERT</command> command into a
!      table containing OIDs.
      </para>

      <para>
Index: doc/src/sgml/pltcl.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/pltcl.sgml,v
retrieving revision 2.34
diff -c -r2.34 pltcl.sgml
*** doc/src/sgml/pltcl.sgml    22 Jan 2005 22:56:36 -0000    2.34
--- doc/src/sgml/pltcl.sgml    11 Mar 2005 05:48:06 -0000
***************
*** 401,407 ****
         <para>
          Returns the OID of the row inserted by the last
          <function>spi_exec</> or <function>spi_execp</>,
!         if the command was a single-row <command>INSERT</>.  (If not, you get zero.)
         </para>
        </listitem>
       </varlistentry>
--- 401,408 ----
         <para>
          Returns the OID of the row inserted by the last
          <function>spi_exec</> or <function>spi_execp</>,
!         if the command was a single-row <command>INSERT</> and
!         modified table contained OIDs.  (If not, you get zero.)
         </para>
        </listitem>
       </varlistentry>
Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/runtime.sgml,v
retrieving revision 1.307
diff -c -r1.307 runtime.sgml
*** doc/src/sgml/runtime.sgml    4 Mar 2005 20:21:05 -0000    1.307
--- doc/src/sgml/runtime.sgml    11 Mar 2005 05:20:38 -0000
***************
*** 3587,3609 ****
          newly-created tables, if neither <literal>WITH OIDS</literal>
          nor <literal>WITHOUT OIDS</literal> is specified. It also
          determines whether OIDs will be included in tables created by
!         <command>SELECT INTO</command>. In
!         <productname>PostgreSQL</productname> &version;
!         <varname>default_with_oids</varname> defaults to true. This is
!         also the behavior of previous versions of
!         <productname>PostgreSQL</productname>. However, assuming that
!         tables will contain OIDs by default is not encouraged. This
!         option will probably default to false in a future release of
!         <productname>PostgreSQL</productname>.
         </para>

         <para>
!         To ease compatibility with applications that make use of OIDs,
!         this option should left enabled. To ease compatibility with
!         future versions of <productname>PostgreSQL</productname>, this
!         option should be disabled, and applications that require OIDs
!         on certain tables should explicitly specify <literal>WITH
!         OIDS</literal> when those tables are created.
         </para>
        </listitem>
       </varlistentry>
--- 3587,3604 ----
          newly-created tables, if neither <literal>WITH OIDS</literal>
          nor <literal>WITHOUT OIDS</literal> is specified. It also
          determines whether OIDs will be included in tables created by
!         <command>SELECT INTO</command>. In <productname>PostgreSQL</>
!         8.1 <varname>default_with_oids</> is disabled by default; in
!         prior versions of PostgreSQL, it was true by default.
         </para>

         <para>
!         The use of OIDs in user tables is considered deprecated, so
!         most installations should leave this variable disabled.
!         Applications that require OIDs for a particular table should
!         specify <literal>WITH OIDS</literal> when creating the
!         table. This variable can be enabled for compatibility with old
!         applications that do not follow this behavior.
         </para>
        </listitem>
       </varlistentry>
Index: doc/src/sgml/ref/select_into.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/ref/select_into.sgml,v
retrieving revision 1.33
diff -c -r1.33 select_into.sgml
*** doc/src/sgml/ref/select_into.sgml    9 Jan 2005 05:57:45 -0000    1.33
--- doc/src/sgml/ref/select_into.sgml    11 Mar 2005 05:52:25 -0000
***************
*** 94,107 ****
    </para>

    <para>
!    Prior to <productname>PostgreSQL</> 8.0, the table created by
!    <command>SELECT INTO</command> always included OIDs.
!    As of <productname>PostgreSQL</> 8.0, the
!    inclusion of OIDs in the table created by <command>SELECT
!    INTO</command> is controlled by the
!    <xref linkend="guc-default-with-oids"> configuration variable. This
!    variable currently defaults to true, but will likely default to
!    false in a future release of <productname>PostgreSQL</>.
    </para>
   </refsect1>

--- 94,106 ----
    </para>

    <para>
!    Prior to <productname>PostgreSQL</> 8.1, the table created by
!    <command>SELECT INTO</command> included OIDs by default. In
!    <productname>PostgreSQL</productname> 8.1, this is not the case
!    — to include OIDs in the created table, the <xref
!    linkend="guc-default-with-oids"> configuration variable must be
!    enabled. Alternatively, <command>CREATE TABLE AS</command> can be
!    used with the <literal>WITH OIDS</literal> clause.
    </para>
   </refsect1>

Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /var/lib/cvs/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.254
diff -c -r1.254 guc.c
*** src/backend/utils/misc/guc.c    4 Mar 2005 20:21:06 -0000    1.254
--- src/backend/utils/misc/guc.c    11 Mar 2005 04:36:43 -0000
***************
*** 139,145 ****

  bool        Password_encryption = true;

! bool        default_with_oids = true;

  int            log_min_error_statement = PANIC;
  int            log_min_messages = NOTICE;
--- 139,145 ----

  bool        Password_encryption = true;

! bool        default_with_oids = false;

  int            log_min_error_statement = PANIC;
  int            log_min_messages = NOTICE;
***************
*** 801,811 ****
      },
      {
          {"default_with_oids", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
!             gettext_noop("By default, newly-created tables should have OIDs."),
              NULL
          },
          &default_with_oids,
!         true, NULL, NULL
      },
      {
          {"redirect_stderr", PGC_POSTMASTER, LOGGING_WHERE,
--- 801,811 ----
      },
      {
          {"default_with_oids", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
!             gettext_noop("Create new tables with OIDs by default."),
              NULL
          },
          &default_with_oids,
!         false, NULL, NULL
      },
      {
          {"redirect_stderr", PGC_POSTMASTER, LOGGING_WHERE,
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /var/lib/cvs/pgsql/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.135
diff -c -r1.135 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample    4 Mar 2005 20:21:06 -0000    1.135
--- src/backend/utils/misc/postgresql.conf.sample    11 Mar 2005 04:37:06 -0000
***************
*** 314,320 ****
  #add_missing_from = true
  #regex_flavor = advanced    # advanced, extended, or basic
  #sql_inheritance = true
! #default_with_oids = true

  # - Other Platforms & Clients -

--- 314,320 ----
  #add_missing_from = true
  #regex_flavor = advanced    # advanced, extended, or basic
  #sql_inheritance = true
! #default_with_oids = false

  # - Other Platforms & Clients -


pgsql-patches by date:

Previous
From: Neil Conway
Date:
Subject: Re: trivial refactoring of WaitOnLock
Next
From: Simon Riggs
Date:
Subject: Re: [HACKERS] WAL: O_DIRECT and multipage-writer (+