Re: Creating foreign key constraint to child table?
| От | Allan Engelhardt |
|---|---|
| Тема | Re: Creating foreign key constraint to child table? |
| Дата | |
| Msg-id | 3B6D4409.64B17684@cybaea.com обсуждение исходный текст |
| Ответ на | Creating foreign key constraint to child table? (Allan Engelhardt <allane@cybaea.com>) |
| Список | pgsql-sql |
I obviously haven't had enough coffee yet... :-) The following script works as expected. drop database test; create database test; \c test create table foo (id integer primary key); create table bar () inherits (foo); create unique index bar_id_idx ON bar(id); create table baz (bar integer, constraint fk_bar foreign key (bar) references bar(id)); insert into foo values (1); insert into bar values (2); insert into baz values (2); insert into baz values (1); -- fails Sorry. --- Allan. I wrote: > I would like to create a FOREIGN KEY constraint to an inherited column, like: > > test=# CREATE TABLE foo(id INTEGER PRIMARY KEY); > test=# CREATE TABLE bar() INHERITS (foo); > test=# CREATE TABLE baz (bar INTEGER, CONSTRAINT fk_bar FOREIGN KEY (bar) REFERENCES bar(id)); > ERROR: UNIQUE constraint matching given keys for referenced table "bar" not found > > This obvioulsy doesn't work. I *can* create a FOREIGN KEY contraint to the parent table: > > test=# create table baz(bar integer, constraint fk_bar foreign key (bar) references foo(id)); > NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s) > CREATE > > but this is not exactly what I want: I need to ensure that baz.bar is a bar and not just any foo. > > Do I need to write my own INSERT/UPDATE triggers on baz to check the tableoid, or is there a nice way to do this? > > Any examples on how to do this? In particular, do I need to do a SELECT on pg_class for every INSERT / UPDATE in baz,just to get the tableoid for bar ? There *is* an index on pg_class.relname but still... > > --- Allan.
В списке pgsql-sql по дате отправления: