There is an OID (Object Identification number) hidden on every row of every table in PostgreSQL. It is unique across all rows in your database. You can't get rid of it, so it seems like you might as well use it. As part of creating/organizing our database architecture I considered and attempted a number of strategies, and ended up deciding not to make use of the OID's as keys.
The final pro's and con's are listed below, as are related links. If anyone out there has anything to add to this list, especially in disagreement, please let me know.
Inserts are easier to Prove, simpler and safer to generate than anything else
Less storage (of course we are only talking 4 bytes for each key)
Simpler (looking) schema
There anyway, might as well use
No way of using referential integrity using oid
Tool phpPgAdmin 2.3 doesn't support it
Complicates Database Loads (in order to retain OID values
Possible OID conflicts after loads
Not included as part of select *
Changes configuration of dbdump, dbcopy