| From: | Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr> |
|---|---|
| To: | PostgreSQL Bugs List <pgsql-bugs(at)postgresql(dot)org> |
| Subject: | "strange" rule behavior with nextval on new.* fields |
| Date: | 2004-11-10 09:23:41 |
| Message-ID: | Pine.LNX.4.61.0411101005280.4884@sablons.cri.ensmp.fr |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
Dear debuggers,
I'd like to report the following "strange" behavior that I encountered
while trying (a bad idea, I know) to use a rule as a "poor man sql-trigger".
It seems that "on update do also" rules the new.* fields are evaluated
several times instead of being computed once, which is a bad idea, esp.
for "nextval".
As a consequence, my update does not work, i.e. new.id is actually
different from the id being used by the insert in the example so the
expected behavior that previous . [Note that even if it would work as I
expected, concurrent transaction could break the property.]
Anyway, it really looks like a strange behavior to me, so misleading and
unexpected that it could be qualified as a bug rather than a feature. I
did not spot such caveats by a quick look thru the documentation.
In the attached file, the result of 4 inserts is:
id | data | islast
----+-------+--------
1 | one | f
3 | two | f
6 | three | f
10 | four | f
last_val is 14
Where I would rather have expected:
id | data | islast
----+-------+--------
1 | one | f
2 | two | f
3 | three | f
4 | four | t
last_val should be 4
Have a nice day,
--
Fabien.
| Attachment | Content-Type | Size |
|---|---|---|
| multi_rule_eval.sql | text/plain | 534 bytes |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Andrew McMillan | 2004-11-10 10:30:32 | Re: ALTER USER SET log_* not allowed... |
| Previous Message | Kristian Jörg | 2004-11-10 09:22:27 | PostgresQL 8 beta 4 bugs |