Daisuke Maki wrote:
> Hi,
>
> First, apologies if my question is a bit off-course. Please feel free to
> direct me to a different mailing list if not appropriate.
>
> I'm currently trying to embed Senna full text search engine
> (http://qwik.jp/senna/) into postgres. I'm trying to achieve this by
> using triggers (implemented in C) to cause an update to senna's index at
> various points.
>
> This seemed to work fine until I realized that while postgres' SQL
> commands could be rolled back, Senna's index remained already-changed.
> There are other potential issues with regards to transaction safety, but
> currently this seems to be a problem that I cannot fix by simply
> patching Senna. So I thought that if there was a rollback trigger, I
> could call whatever necessary to undo the changes that were made to the
> index.
>
> A quick scan of the docs and the source code tree seems to indicate that
> there is no such thing as a rollback trigger, short of hacking it.
>
> Now, I'm wondering:
> 1. Is there a rollback/commit trigger? If not, is it planned to be
> implemented at all?
> 2. Is there a way to undo changes to data external to postgres
> when a rollback occurs, OR, only update that external data
> when a commit occurs?
>
> Thanks in advance,
> --d
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faq
>
Hello Daisuke,
would it work to change from "rollback triggers" and use two-phase commit?
You could try something like:
1. Insert/Update/Delete in postgres
2. Prepare your postgres commit
3. Update your senna index
4a. If the senna index update succeeded, commit in postgres
4b. If the senna index update failed, rollback in postgres
mark