From: | "<Miguel Sofer" <mig(at)utdt(dot)edu> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Rules and referential integrity |
Date: | 1999-11-12 15:13:55 |
Message-ID: | 199911121528.MAA07053@ant.utdt |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
I seem to have found a way to use the rule system for referential
integrity checks.
The manual says (in the "Rules vs Triggers part)
"It is possible, to place a qualified rule that rewrites a query to
NOTHING if the value of a column does not appear in another table. But
then the data is silently thrown away and that's not a good idea. If
checks for valid values are required, and in the case of an invalid
value an error message should be generated, it must be done by a
trigger for now."
Now: why not define a function (in pltcl; could be something else?)
create function err(bpchar) returns bpchar
as 'error $1' language 'pltcl'
Then, if the value of a column does not appear in another table, you
could rewrite the query to (for instance)
select err('your message')
This will raise a PGRES_FATAL_ERROR , with error message
ERROR: pltcl: your message
So: it is possible. Why it is better (or worse) than a trigger, I do
not know. Views on that?
From | Date | Subject | |
---|---|---|---|
Next Message | Jan Wieck | 1999-11-12 16:13:50 | Re: [SQL] Rules and referential integrity |
Previous Message | marten | 1999-11-12 07:55:30 | Re: [SQL] HAVING in EXISTS-clause ... |