1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Update OID item description.

This commit is contained in:
Bruce Momjian
2005-01-30 02:06:33 +00:00
parent 64428b8daf
commit 811df91340
2 changed files with 24 additions and 57 deletions

36
doc/FAQ
View File

@ -1,7 +1,7 @@
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)
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 To uniquely number columns in user tables, it is best to use SERIAL
between tables. These OIDs can be used to identify specific user rows rather than OIDs because SERIAL sequences are unique only within a
and used in joins. It is recommended you use column type OID to store single table. and are therefore less likely to overflow. SERIAL8 is
OID values. You can create an index on the OID field for faster available for storing eight-byte sequence values.
access.
OIDs are assigned to all new rows from a central area that is used by
all databases. If you want to change the OID to something else, or if
you want to make a copy of the table, with the original OIDs, there is
no reason you can't do it:
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

View File

@ -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)
<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>PostgreSQL uses <SMALL>OID</SMALL>s in its internal system <P>To uniquely number columns in user tables, it is best to use
tables to link rows between tables. These <SMALL>OID</SMALL>s can <SMALL>SERIAL</> rather than O<SMALL>ID</SMALL>s because
be used to identify specific user rows and used in joins. It is <SMALL>SERIAL<SMALL> sequences are unique only within a single
recommended you use column type <SMALL>OID</SMALL> to store table. and are therefore less likely to overflow.
<SMALL>OID</SMALL> values. You can create an index on the <SMALL>SERIAL8</SMALL> is available for storing eight-byte sequence
<SMALL>OID</SMALL> field for faster access.</P> values.</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