Commit 811df913 authored by Bruce Momjian's avatar Bruce Momjian

Update OID item description.

parent 64428b8d
Frequently Asked Questions (FAQ) for PostgreSQL Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Wed Jan 19 14:45:22 EST 2005 Last updated: Sat Jan 29 21:05:17 EST 2005
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
...@@ -956,32 +956,16 @@ BYTEA bytea variable-length byte array (null-byte safe) ...@@ -956,32 +956,16 @@ BYTEA bytea variable-length byte array (null-byte safe)
4.15) What is an OID? What is a TID? 4.15) What is an OID? What is a TID?
OIDs are PostgreSQL's answer to unique row ids. Every row that is Every row that is created in PostgreSQL gets a unique OID unless
created in PostgreSQL gets a unique OID. All OIDs generated during created WITHOUT OIDS. OIDs are autotomatically assigned unique 4-byte
initdb are less than 16384 (from include/access/transam.h). All integers that are unique across the entire installation. However, they
user-created OIDs are equal to or greater than this. By default, all overflow at 4 billion, and then the OIDs start being duplicated.
these OIDs are unique not only within a table or database, but unique PostgreSQL uses OIDs to link its internal system tables together.
within the entire PostgreSQL installation.
PostgreSQL uses OIDs in its internal system tables to link rows
between tables. These OIDs can be used to identify specific user rows
and used in joins. It is recommended you use column type OID to store
OID values. You can create an index on the OID field for faster
access.
OIDs are assigned to all new rows from a central area that is used by To uniquely number columns in user tables, it is best to use SERIAL
all databases. If you want to change the OID to something else, or if rather than OIDs because SERIAL sequences are unique only within a
you want to make a copy of the table, with the original OIDs, there is single table. and are therefore less likely to overflow. SERIAL8 is
no reason you can't do it: available for storing eight-byte sequence values.
CREATE TABLE new_table(mycol int);
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
COPY tmp_table TO '/tmp/pgtable';
COPY new_table WITH OIDS FROM '/tmp/pgtable';
DROP TABLE tmp_table;
OIDs are stored as 4-byte integers, and will overflow at 4 billion. No
one has reported this ever happening, and we plan to have the limit
removed before anyone does.
TIDs are used to identify specific physical rows with block and offset TIDs are used to identify specific physical rows with block and offset
values. TIDs change after rows are modified or reloaded. They are used values. TIDs change after rows are modified or reloaded. They are used
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
alink="#0000ff"> alink="#0000ff">
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1> <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
<P>Last updated: Wed Jan 19 14:45:22 EST 2005</P> <P>Last updated: Sat Jan 29 21:05:17 EST 2005</P>
<P>Current maintainer: Bruce Momjian (<A href= <P>Current maintainer: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
...@@ -1190,37 +1190,20 @@ BYTEA bytea variable-length byte array (null-byte safe) ...@@ -1190,37 +1190,20 @@ BYTEA bytea variable-length byte array (null-byte safe)
<H4><A name="4.15">4.15</A>) What is an <SMALL>OID</SMALL>? What is <H4><A name="4.15">4.15</A>) What is an <SMALL>OID</SMALL>? What is
a <SMALL>TID</SMALL>?</H4> a <SMALL>TID</SMALL>?</H4>
<P><SMALL>OID</SMALL>s are PostgreSQL's answer to unique row ids. <P>Every row that is created in PostgreSQL gets a unique
Every row that is created in PostgreSQL gets a unique <SMALL>OID</SMALL> unless created <SMALL>WITHOUT OIDS</SMALL>.
<SMALL>OID</SMALL>. All <SMALL>OID</SMALL>s generated during O<SMALL>ID</SMALL>s are autotomatically assigned unique 4-byte
<I>initdb</I> are less than 16384 (from integers that are unique across the entire installation. However,
<I>include/access/transam.h</I>). All user-created they overflow at 4 billion, and then the O<SMALL>ID</SMALL>s start
<SMALL>OID</SMALL>s are equal to or greater than this. By default, being duplicated. PostgreSQL uses <SMALL>OID</SMALL>s to link its
all these <SMALL>OID</SMALL>s are unique not only within a table or internal system tables together.</P>
database, but unique within the entire PostgreSQL installation.</P>
<P>To uniquely number columns in user tables, it is best to use
<P>PostgreSQL uses <SMALL>OID</SMALL>s in its internal system <SMALL>SERIAL</> rather than O<SMALL>ID</SMALL>s because
tables to link rows between tables. These <SMALL>OID</SMALL>s can <SMALL>SERIAL<SMALL> sequences are unique only within a single
be used to identify specific user rows and used in joins. It is table. and are therefore less likely to overflow.
recommended you use column type <SMALL>OID</SMALL> to store <SMALL>SERIAL8</SMALL> is available for storing eight-byte sequence
<SMALL>OID</SMALL> values. You can create an index on the values.</P>
<SMALL>OID</SMALL> field for faster access.</P>
<P>O<SMALL>ID</SMALL>s are assigned to all new rows from a central
area that is used by all databases. If you want to change the
<SMALL>OID</SMALL> to something else, or if you want to make a copy
of the table, with the original <SMALL>OID</SMALL>s, there is no
reason you can't do it:</P>
<PRE>
CREATE TABLE new_table(mycol int);
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
COPY tmp_table TO '/tmp/pgtable';
COPY new_table WITH OIDS FROM '/tmp/pgtable';
DROP TABLE tmp_table;
</PRE>
<P>O<SMALL>ID</SMALL>s are stored as 4-byte integers, and will
overflow at 4 billion. No one has reported this ever happening, and
we plan to have the limit removed before anyone does.</P>
<P>T<SMALL>ID</SMALL>s are used to identify specific physical rows <P>T<SMALL>ID</SMALL>s are used to identify specific physical rows
with block and offset values. T<SMALL>ID</SMALL>s change after rows with block and offset values. T<SMALL>ID</SMALL>s change after rows
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment