Re: question on UPDATE rules
| От | Tom Lane |
|---|---|
| Тема | Re: question on UPDATE rules |
| Дата | |
| Msg-id | 29468.956448367@sss.pgh.pa.us обсуждение исходный текст |
| Ответ на | question on UPDATE rules (Matthew Denny <mdenny@CS.Berkeley.EDU>) |
| Список | pgsql-sql |
Matthew Denny <mdenny@CS.Berkeley.EDU> writes:
> I have a rule defined as the following:
> CREATE RULE fooBar AS ON
> UPDATE TO VectorMessageTable WHERE new.acks = (SELECT
> numReplicas FROM VectorTable vt WHERE vt.ID =
> new.ID) DO (DELETE FROM VectorMessageTable WHERE ID = new.ID AND
> versionNum = new.versionNum);
> if I call:
> UPDATE VectorMessageTable SET acks =
> <corresponding-numReplicas-from-VectorTable>
> Then I the update goes through, but none of the records are
> deleted. However, if I run any other subsequent update on these tuples in
> VectorMessageTable (even ones that change the acks value) then the
> rule fires and the tuples are deleted.
Not sure, but maybe you want DO INSTEAD DELETE ... rather than just
DO DELETE ... ? As it stands, you're commanding the machine to both
delete and update the tuples for which the rule fires. I think that
will result in the old tuple being marked deleted (twice!), but the
update will still produce a new tuple that's not marked deleted.
That seems to match your symptoms...
regards, tom lane
В списке pgsql-sql по дате отправления: