Object identifiers (OIDs) are used internally by
PostgreSQL as primary keys for various
- system tables. An OID system column is also added to user-created
- tables, unless WITHOUT OIDS is specified when
- the table is created, or the
- configuration variable is set to false. Type oid>
- represents an object identifier. There are also several alias
- types for oid>: regproc>, regprocedure>,
+ system tables. OIDs are not added to user-created tables, unless
+ WITH OIDS is specified when the table is
+ created, or the
+ configuration variable is enabled. Type oid> represents
+ an object identifier. There are also several alias types for
+ oid>: regproc>, regprocedure>,
regoper>, regoperator>, regclass>, and
regtype>. shows an
overview.
references to system tables.
-
- OIDs are included by default in user-created tables in
-
PostgreSQL &version;. However, this
- behavior is likely to change in a future version of
-
PostgreSQL. Eventually, user-created
- tables will not include an OID system column unless WITH
- OIDS is specified when the table is created, or the
- default_with_oids configuration variable is set
- to true. If your application requires the presence of an OID
- system column in a table, it should specify WITH
- OIDS when that table is created to ensure compatibility
- with future releases of
PostgreSQL.
-
-
-
The 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.)
+ 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.)
-
+
Data Definition
column
- The object identifier (object ID) of a row. This is a serial
- number that is automatically added by
-
PostgreSQL to all table rows (unless
- the table was created using WITHOUT OIDS, in which
- case this column is not present). This column is of type
+ The object identifier (object ID) of a row. This column is only
+ present if the table was created using WITH
+ OIDS, or if the
+ configuration variable was enabled. This column is of type
oid (same name as the column); see
linkend="datatype-oid"> for more information about the type.
the
SQL engine, and
RESULT_OID>,
the OID of the last row inserted by the most recent
SQL command. Note that
RESULT_OID>
- is only useful after an INSERT command.
+ is only useful after an INSERT command into a
+ table containing OIDs.
Returns the OID of the row inserted by the last
- spi_exec> or spi_execp>,
- if the command was a single-row INSERT>. (If not, you get zero.)
+ spi_exec> or spi_execp>, if the
+ command was a single-row INSERT> and the modified
+ table contained OIDs. (If not, you get zero.)
- Prior to
PostgreSQL> 8.0, the table created by
- SELECT INTO always included OIDs.
- As of
PostgreSQL> 8.0, the
- inclusion of OIDs in the table created by SELECT
- INTO is controlled by the
- configuration variable. This
- variable currently defaults to true, but will likely default to
- false in a future release of
PostgreSQL>.
+ Prior to
PostgreSQL> 8.1, the table created by
+ SELECT INTO included OIDs by default. In
+
PostgreSQL 8.1, this is not the case
+ — to include OIDs in the new table, the
+ linkend="guc-default-with-oids"> configuration variable must be
+ enabled. Alternatively, CREATE TABLE AS can be
+ used with the WITH OIDS clause.
newly-created tables, if neither WITH OIDS
nor WITHOUT OIDS is specified. It also
determines whether OIDs will be included in tables created by
- SELECT INTO. In
- default_with_oids defaults to true. This is
- also the behavior of previous versions of
-
PostgreSQL. However, assuming that
- tables will contain OIDs by default is not encouraged. This
- option will probably default to false in a future release of
-
-
- To ease compatibility with applications that make use of OIDs,
- this option should left enabled. To ease compatibility with
- future versions of
PostgreSQL, this
- option should be disabled, and applications that require OIDs
- on certain tables should explicitly specify WITH
- OIDS when those tables are created.
+
SELECT INTO. In
PostgreSQL>
+ 8.1 default_with_oids> is disabled by default; in
+ prior versions of PostgreSQL, it was true by default.
+
+
+ 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 WITH OIDS when creating the
+ table. This variable can be enabled for compatibility with old
+ applications that do not follow this behavior.
* Written by Peter Eisentraut
.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.254 2005/03/04 20:21:06 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.255 2005/03/13 09:36:31 neilc Exp $
*
*--------------------------------------------------------------------
*/
bool Password_encryption = true;
-bool default_with_oids = true;
+bool default_with_oids = false;
int log_min_error_statement = PANIC;
int log_min_messages = NOTICE;
},
{
{"default_with_oids", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
- gettext_noop("By default, newly-created tables should have OIDs."),
+ gettext_noop("Create new tables with OIDs by default."),
NULL
},
&default_with_oids,
- true, NULL, NULL
+ false, NULL, NULL
},
{
{"redirect_stderr", PGC_POSTMASTER, LOGGING_WHERE,
#add_missing_from = true
#regex_flavor = advanced # advanced, extended, or basic
#sql_inheritance = true
-#default_with_oids = true
+#default_with_oids = false
# - Other Platforms & Clients -