Search Postgresql Archives

Re: Will PG use composite index to enforce foreign keys?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Scott Marlowe wrote:

As a secondary question, is there any way I could have answered this
myself, using analyze, the system catalogs, etc?  ANALYZE DELETE
doesn't seem to show the FK checking that must go on behind the scenes.

You could have coded up an example to see if it worked I guess.
Here's a short example:

create table a (i int, j int, info text, primary key (i,j));
create table b (o int, p int, moreinfo text, foreign key (o,p) references a);
insert into a values (1,2,'abc');
insert into b values (1,2,'def');
INSERT 0 1
insert into b values (1,3,'def');
ERROR: insert or update on table "b" violates foreign key constraint "b_o_fkey"
DETAIL:  Key (o,p)=(1,3) is not present in table "a".
delete from a;
ERROR:  update or delete on table "a" violates foreign key constraint
"b_o_fkey" on table "b"
DETAIL:  Key (i,j)=(1,2) is still referenced from table "b".

But this doesn't really match my question - I wanted to know whether checking an FK on =one= column would use a composite key on =several= columns. Modifying your example:

create table a (i int PRIMARY KEY, j int, info text);
create table b (o int REFERENCES A, p int, moreinfo text, PRIMARY KEY (O,P));
insert into a values (1,2,'abc');
insert into b values (1,2,'def');

delete from a where i = 1;


Here, the FK is a simple one, and the referential integrity machinery simply needs to check whether there is a row in table B with O=1. My question is whether it will use the composite PK index.

I guess a generalization of my question is whether the FK-checking machinery simply does a SELECT against the referencing column. That is, in this example, if the following effectively happens:

  SELECT * FROM B WHERE O = 1;

then PG will use whatever index might make the query faster. Is this in fact the case, that I should think of the FK machinery as simply doing the appropriate SELECT?

Thanks.

- John D. Burger
  MITRE



---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux