Thread: Trigger.. AFTER and BEFORE with specific column changed

Trigger.. AFTER and BEFORE with specific column changed

From
Albert
Date:
*I'm trying to follow this :*


CREATE TRIGGER check_update
    *BEFORE* UPDATE ON accounts
    FOR EACH ROW
    WHEN (OLD.balance IS DISTINCT FROM NEW.balance)
    EXECUTE PROCEDURE check_account_update();

*but with AFTER instead of BEFORE. and I'm keep getting error on or near
WHEN.
does that because i have to use BEFORE ? what if i need to execute the
procedure after updating column and it has really changed.*

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Trigger-AFTER-and-BEFORE-with-specific-column-changed-tp5610712p5610712.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: Trigger.. AFTER and BEFORE with specific column changed

From
Adrian Klaver
Date:
On 04/01/2012 11:45 AM, Albert wrote:
> *I'm trying to follow this :*
>
>
> CREATE TRIGGER check_update
>      *BEFORE* UPDATE ON accounts
>      FOR EACH ROW
>      WHEN (OLD.balance IS DISTINCT FROM NEW.balance)
>      EXECUTE PROCEDURE check_account_update();
>
> *but with AFTER instead of BEFORE. and I'm keep getting error on or near
> WHEN.

What is the error message?

> does that because i have to use BEFORE ? what if i need to execute the
> procedure after updating column and it has really changed.*

Depends what the procedure is doing. For more detail on what the WHEN
does in BEFORE and AFTER triggers see here:
http://www.postgresql.org/docs/9.0/interactive/sql-createtrigger.html

Look for the Notes section.

>
> --
> View this message in context:
http://postgresql.1045698.n5.nabble.com/Trigger-AFTER-and-BEFORE-with-specific-column-changed-tp5610712p5610712.html
> Sent from the PostgreSQL - general mailing list archive at Nabble.com.
>


--
Adrian Klaver
adrian.klaver@gmail.com

Re: Trigger.. AFTER and BEFORE with specific column changed

From
Albert
Date:
*i get:*

Syntax error at or near 'WHEN'
LINE 1: ... check_update AFTER UPDATE ON accounts FOR EACH ROW WHEN
(OLD.balance IS DISTINCT FROM NEW.balance) ....

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Trigger-AFTER-and-BEFORE-with-specific-column-changed-tp5610712p5611501.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: Trigger.. AFTER and BEFORE with specific column changed

From
Adrian Klaver
Date:
On 04/01/2012 10:10 PM, Albert wrote:
> *i get:*
>
> Syntax error at or near 'WHEN'
> LINE 1: ... check_update AFTER UPDATE ON accounts FOR EACH ROW WHEN
> (OLD.balance IS DISTINCT FROM NEW.balance) ....

Hmmm. So two questions:

What happens if you copy the example in the docs exactly and use NEW.*
and OLD.*?

What is the table definition for accounts?

>
> --
> View this message in context:
http://postgresql.1045698.n5.nabble.com/Trigger-AFTER-and-BEFORE-with-specific-column-changed-tp5610712p5611501.html
> Sent from the PostgreSQL - general mailing list archive at Nabble.com.
>


--
Adrian Klaver
adrian.klaver@gmail.com

Re: Trigger.. AFTER and BEFORE with specific column changed

From
Tom Lane
Date:
Albert <oo_O2_oo@hotmail.com> writes:
> *i get:*
> Syntax error at or near 'WHEN'
> LINE 1: ... check_update AFTER UPDATE ON accounts FOR EACH ROW WHEN
> (OLD.balance IS DISTINCT FROM NEW.balance) ....

Does the BEFORE case work for you either?  I'm suspicious that you
are using a PG version that predates WHEN-clause support in triggers.

            regards, tom lane

Re: Trigger.. AFTER and BEFORE with specific column changed

From
"Daniel Verite"
Date:
    Aleksander Rozman wrote:

> Now I am not sure two of this directories are old databases, but I think
> they are... Is there a way to register one of this databases into new
> installation (I am sure that directory "1" is old postgres database, and
> "11563" is my database I want to save, and "11564" is new postgresql
> database (this is only directory with new date).

Actually 1, 11563 and 11564 are what you get with a fresh new installation.
On a 8.4 install on Ubuntu, the corresponding databases are:

SELECT oid, datname from pg_database where oid in (1,11563,11564);

  oid  |  datname
-------+-----------
     1 | template1
 11563 | template0
 11564 | postgres

Also normally initdb wouldn't work on a non-empty data directory, anyway.
I'd say that either the old data directory has been moved aside at some point
of the upgrade procedure, or it has been wiped out :(

Best regards,
--
Daniel
PostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org