Обсуждение: Short-circuiting FK check for a newly-added field

Поиск
Список
Период
Сортировка

Short-circuiting FK check for a newly-added field

От
Decibel!
Дата:
I need to add a field to a fairly large table. In the same alter
statement I'd like to add a FK constraint on that new field. Is there
any way to avoid the check of the table that the database is doing
right now? The check is pointless because the newly added field is
nothing but NULLs.

This is version 8.1.mumble.
--
Decibel!, aka Jim C. Nasby, Database Architect  decibel@decibel.org
Give your computer some brain candy! www.distributed.net Team #1828



Вложения

Re: Short-circuiting FK check for a newly-added field

От
David Fetter
Дата:
On Tue, May 20, 2008 at 02:25:15PM -0400, Decibel! wrote:
> I need to add a field to a fairly large table. In the same alter statement
> I'd like to add a FK constraint on that new field. Is there any way to
> avoid the check of the table that the database is doing right now? The
> check is pointless because the newly added field is nothing but NULLs.
>
> This is version 8.1.mumble.

Have you tried making the FK constraint INITIALLY DEFERRED?

Cheers,
David.
--
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@gmail.com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

Re: Short-circuiting FK check for a newly-added field

От
Reece Hart
Дата:
On Tue, May 20, 2008 at 02:25:15PM -0400, Decibel! wrote:
> I need to add a field to a fairly large table. In the same alter statement
> I'd like to add a FK constraint on that new field. Is there any way to
> avoid the check of the table that the database is doing right now? The
> check is pointless because the newly added field is nothing but NULLs.
>
I don't see the problem. FK constraints don't fire on NULL values. I
think you might be imagining that a problem exists when it doesn't.

If the FK column is created as NOT NULL, there is a problem. The best
way to handle this case is to add the column (allowing nulls), populate
the columns, then alter the column to make it NOT NULL. You can wrap
that all in a transaction if you like.

> This is version 8.1.mumble.
>
You can get the version using select version().


-Reece

Re: Short-circuiting FK check for a newly-added field

От
Alvaro Herrera
Дата:
Reece Hart wrote:
> On Tue, May 20, 2008 at 02:25:15PM -0400, Decibel! wrote:
> > I need to add a field to a fairly large table. In the same alter statement
> > I'd like to add a FK constraint on that new field. Is there any way to
> > avoid the check of the table that the database is doing right now? The
> > check is pointless because the newly added field is nothing but NULLs.
> >
> I don't see the problem. FK constraints don't fire on NULL values. I
> think you might be imagining that a problem exists when it doesn't.

The problem is that it does a table scan only to find that all values
are NULL, which is pretty pointless.

--
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.