Re: Are PRIMARY KEYs just UNIQUE INDEXes?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Jules Bean <jules(at)jellybean(dot)co(dot)uk>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Are PRIMARY KEYs just UNIQUE INDEXes?
Date: 2000-08-23 14:16:02
Message-ID: 27866.967040162@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Jules Bean <jules(at)jellybean(dot)co(dot)uk> writes:
> Does postgres remember that something is a primary key? Or is PRIMARY
> KEY really just a shorthand for creating a unique index?

pgsql does remember that an index was created via a PRIMARY KEY
declaration, but AFAIR the only thing that flag does is indicate
the logical "primary key" in situations like interpreting a REFERENCES
constraint that doesn't mention the specific column to use. It
certainly has no bearing on the speed of inserts.

> Secondly, what is typically the slowest part of an insert? Presumably
> it checks all the unique indices, but that should be quick, right?

If you don't have any constraints or other fancy features, I'd think
the insertion of the new index entries is probably the slowest thing.
Uniqueness checks are done as part of that; they don't add much overhead
*unless* you are constantly deleting and reinserting rows with the same
key value (note that UPDATE is equivalent to delete+reinsert, too).
In that case, there are still index entries for the deleted rows,
and the system has to actually visit all the deleted rows with the same
key as the to-be-inserted row to verify that they're all deleted.
VACUUM will clean this up by physically removing the deleted rows and
their index entries.

Dunno if that explains your problem or not...

regards, tom lane

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Jan Wieck 2000-08-23 14:36:49 Re: windows supported platforms
Previous Message Tom Lane 2000-08-23 14:07:12 Re: some problems