Re: Inheritance and referential integritry in 7.0.3

Поиск
Список
Период
Сортировка
От Eric G. Miller
Тема Re: Inheritance and referential integritry in 7.0.3
Дата
Msg-id 20010408003051.E13742@calico.local
обсуждение исходный текст
Ответ на Inheritance and referential integritry in 7.0.3  ("Alastair D'Silva" <deece@newmillennium.net.au>)
Список pgsql-general
On Sun, Apr 08, 2001 at 01:04:16PM +0800, Alastair D'Silva wrote:
> I am using PostgreSQL 7.0.3 and have the following schema:
>
> CREATE TABLE "products" (
>         "id" SERIAL NOT NULL PRIMARY KEY,
>         "name" text NOT NULL,
>         "description" text NOT NULL,
>         "brand" text NOT NULL,
>         "url" text,
>         "weight" float4 NOT NULL,
>         "stock" int4 NOT NULL DEFAULT 0,
>         "price" decimal(10,2) NOT NULL DEFAULT 0,
>         "warranty" int4 NOT NULL
> );
>
> There are various other tables inheriting from "products".
>
> CREATE TABLE "products1" INHERITS products (
>   "attribute1" text,
>   "attribute2" text
> );
>
>
> There is also another table which references products:
>
> CREATE TABLE "properties" (
>         "product" int4 NOT NULL REFERENCES products (id) ON DELETE CASCADE,
>         "property" text NOT NULL
> );
>
>
> Now, if I insert a row into one of "products" child tables (eg, products1),
> then try to reference it in "properties", it does not work as the product id
> is only visible if products* is the target table. Changing the REFERENCES
> target to product* products a syntax error, and creating a view as the
> REFERENCES target is not allowed.
>
> Short of creating another table which stores all product ids, is there a
> simple way to make this work?

Doesn't work with inheritance...

Do instead:

create table "products1" (
   "product_id"  NOT NULL REFERENCES "products" ("id"),
   "attribute1" text,
   "attribute2" text
);

Then:

BEGIN TRANSACTION;
INSERT INTO "products" (...) VALUES (...);
INSERT INTO "products1" ("product_id", "attribute1", "attribute2")
   VALUES (currval('"products_id_seq"'), 'Foo', 'Bar');
COMMIT;

What's with the quotes anyway? Yuck.

--
Eric G. Miller <egm2@jps.net>

В списке pgsql-general по дате отправления:

Предыдущее
От: "Eric G. Miller"
Дата:
Сообщение: Re: Query
Следующее
От: Joel Burton
Дата:
Сообщение: Re: converting from php3 to php4