Opposite value for RESTRICT in foreign keys? - Mailing list pgsql-general

From Brian Sanders
Subject Opposite value for RESTRICT in foreign keys?
Date
Msg-id sebbbf5b.051@grpwise.hotchkiss.org
Whole thread Raw
List pgsql-general
I apologize if this is a simple question, but after much searching
through google and the list archives, I cannot find any answer.  My
question is this:

Say I have two tables:

CREATE TABLE products(
id int,
name varchar(50)
);

CREATE TABLE orders(
id int,
product_id int,
customer varchar(100)
FOREIGN KEY (product_id) REFERENCES products(id) ON UPDATE CASCADE ON
DELETE ???
);


Is there any way to create a foreign key that *allows* you to delete the
matching row from the referenced table (i.e. does the opposite of "NO
ACTION" or "RESTRICT")?

Basically, what I want to happen is:

* Whenever an order is created, the product_id field in the new record
MUST match an existing id field in the products table. (I don't want to
take orders for products that don't exist.)
* Whenver a product id is changed, all corresponding product_id's in the
orders table MUST be updated.  (I want orders to match their respective
products even when the product's id is changed.)
* Whenever a product is deleted, all corresponding product_id's MUST NOT
be changed or deleted.  (Even though the product is gone, I still want
the product_id to stay the same.)

As you can see I need referential integrity for every operation EXCEPT
deletion.

Is there any solution for this without scrapping the foreign key
altogether?

Thanks,

Brian Sanders
Webmaster
The Hotchkiss School
bsanders@hotchkiss.org
860-435-3141


pgsql-general by date:

Previous
From: frank@chagford.com (Frank Millman)
Date:
Subject: Re: How return a refcusor using functions????
Next
From: Markus.Schmitz
Date:
Subject: Rule on tabel