Jacky Leng wrote:
> --Create table t(a int) with oids;
> --create unique index it on t(oid);
> --insert 4G-16384 rows into t;
> --insert into t values(1);
> As all oids has been used, GetNewObjectId will never find a usable Oid,
GetNewObjectId doesn't try to guarantee uniqueness. You will get
duplicate oids, unless you have a unique index on the oid column.
If you do have a unique index, you will get into an endless loop in
GetNewOidWithIndex. Therefore: don't do that.
At worst, you might be able to turn this into a denial-of-service
attack, by something like 2^32 CREATE TEMPORARY TABLE calls, using up
the OID space of pg_class. But if you have access to CREATE TEMPORARY
TABLE, there's plenty of other ways to launch a DoS attack, so I
wouldn't worry about this too much.
Per documentation of CREATE TABLE:
> Using OIDs in new applications is not recommended: where possible, using a SERIAL or other sequence generator as the table's primary key is preferred.
A sequence will give you more control over wrap-around as well.
In response to
pgsql-bugs by date
|Next:||From: Francisco Olarte Sanz||Date: 2008-02-20 11:21:03|
|Subject: Re: BUG #3965: UNIQUE constraint fails on long column values|
|Previous:||From: Jacky Leng||Date: 2008-02-20 09:53:20|
|Subject: GetNewOidWithIndex can cause infinite loop on user tables(not catalog).|