Обсуждение: Storage of Foreign Keys

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

Storage of Foreign Keys

От
Christian Koetschan
Дата:
Hi,

can anybody tell me how postgres internally stores foreign keys...
E.g. I have a table "tableA" with column "mycolA text" and the constraint
FOREIGN KEY(mycolA) REFERENCES tableB(mycolB)

Is everything I insert into mycolA and mycolB stored twice, or
is there something like a pointer/reference from mycolA to the things
stored in mycolB?

Thanks alot for any information, Christian


Re: Storage of Foreign Keys

От
Alan Hodgson
Дата:
On Monday 21 September 2009, Christian Koetschan
<c.koetschan@biozentrum.uni-wuerzburg.de> wrote:
> Is everything I insert into mycolA and mycolB stored twice, or
> is there something like a pointer/reference from mycolA to the things
> stored in mycolB?
>

It's stored twice and for performance you need to index it in both tables.
If you put ON UPDATE CASCADE on it, an update to the master will hit both
tables though.

--
"No animals were harmed in the recording of this episode. We tried but that
damn monkey was just too fast."

Re: Storage of Foreign Keys

От
Scott Marlowe
Дата:
On Mon, Sep 21, 2009 at 11:09 AM, Alan Hodgson <ahodgson@simkin.ca> wrote:
> On Monday 21 September 2009, Christian Koetschan
> <c.koetschan@biozentrum.uni-wuerzburg.de> wrote:
>> Is everything I insert into mycolA and mycolB stored twice, or
>> is there something like a pointer/reference from mycolA to the things
>> stored in mycolB?
>>
>
> It's stored twice and for performance you need to index it in both tables.
> If you put ON UPDATE CASCADE on it, an update to the master will hit both
> tables though.

Slight correction.  You might need to index it on both ends for
performance.  There are some instances where the referencing table
only ever has a few rows in it, and in those cases, you likely don't
need an index.

Re: Storage of Foreign Keys

От
Lew
Дата:
Scott Marlowe wrote:
> On Mon, Sep 21, 2009 at 11:09 AM, Alan Hodgson <ahodgson@simkin.ca> wrote:
>> On Monday 21 September 2009, Christian Koetschan
>> <c.koetschan@biozentrum.uni-wuerzburg.de> wrote:
>>> Is everything I insert into mycolA and mycolB stored twice, or
>>> is there something like a pointer/reference from mycolA to the things
>>> stored in mycolB?
>>>
>> It's stored twice and for performance you need to index it in both tables.
>> If you put ON UPDATE CASCADE on it, an update to the master will hit both
>> tables though.
>
> Slight correction.  You might need to index it on both ends for
> performance.  There are some instances where the referencing table
> only ever has a few rows in it, and in those cases, you likely don't
> need an index.

And it is likely that the referenced table has an index since foreign keys
reference a primary key or unique-constrained (combination of) column(s).

--
Lew