Re: Trigger Display Bugs in 1.12 pgAdmin - Mailing list pgadmin-support

From Guillaume Lelarge
Subject Re: Trigger Display Bugs in 1.12 pgAdmin
Date
Msg-id 4C9D2C0A.9040007@lelarge.info
Whole thread Raw
In response to Trigger Display Bugs in 1.12 pgAdmin  (Christopher A Hotchkiss <christopher.a.hotchkiss@jpmchase.com>)
Responses Re: Trigger Display Bugs in 1.12 pgAdmin  (Dave Page <dpage@pgadmin.org>)
List pgadmin-support
Hi,

Le 24/09/2010 21:26, Christopher A Hotchkiss a écrit :
> To Who It May Concern,
> I am using the new 1.12 pgAdmin on Windows XP SP3 and I have notice two display inaccuracies when connecting to a
Postgres9 database. 
>
> For example when creating the following trigger:
>
>  CREATE TRIGGER c_aud_trg
>    BEFORE INSERT OR UPDATE OR DELETE
>    ON ca
>    FOR EACH ROW
>    EXECUTE PROCEDURE c_aud_trg_trfunc();
>
> It will get created correctly (checking with pgdump based on suggestions from the pgsql list).
>
> However it will be displayed as:
>  CREATE TRIGGER c_aud_trg
>    BEFORE INSERT OR UPDATE
>    ON ca
>    FOR EACH ROW
>    EXECUTE PROCEDURE c_aud_trg_func(E'\\x');
>
> If that same trigger is dropped and re-added using what is in the database, the following shows up:
>  CREATE TRIGGER c_aud_trg
>    BEFORE INSERT OR UPDATE
>    ON ca
>    FOR EACH ROW
>    EXECUTE PROCEDURE c_aud_trg_func(E'\\x5c7800');
>

Your specific issue is quite easy to fix. It's done on the attached patch.

Unfortunately, it shows another issue. The issue I found relates to the
new GUC bytea_output. Here is a quick example.

ticketx=# CREATE TRIGGER c_aud_trg2
  BEFORE INSERT OR UPDATE OR DELETE
  ON ca
  FOR EACH ROW
  EXECUTE PROCEDURE c_aud_trg_trfunc2('&');

This statement creates a trigger that executes a procedure which accepts
one argument. Let's try to get the contents of the column tgargs of the
pg_trigger table:

ticketx=# select tgargs from pg_trigger where tgname='c_aud_trg2';
 tgargs
--------
 \x2600
(1 row)

This is the new hex output for a bytea column (yes, tgargs is a bytea).
Let's try the old output:

ticketx=# set bytea_output to escape;
SET
ticketx=# select tgargs from pg_trigger where tgname='c_aud_trg2';
 tgargs
--------
 &\000
(1 row)

Much better. So, the only way to fix this, AFAICT, is to set bytea_ouput
to "escape" when connected to a 9.0 server. My question is this: should
I set the parameter at the connection start, or should I set and unset
it during the search of triggers? The latter is less error prone, but
requires to execute three more queries (SHOW  bytea_output, SET
bytea_output TO escape, SET bytea_output TO old_value).

> The second issue is the ordering of 'update of' triggers. For example when creating the following trigger:
> CREATE TRIGGER ca_trig
>   BEFORE UPDATE OF columnA OR DELETE
>   ON ca
>   FOR EACH ROW
>   EXECUTE PROCEDURE c_h_trg_func ();
>
> It will be displayed as:
> CREATE TRIGGER ca_trig
>   BEFORE UPDATE OR DELETE OF columnA
>   ON ca
>   FOR EACH ROW
> EXECUTE PROCEDURE c_h_trg_func ();
>
> This is a syntax error.
>

Fixed on the attached patch.

> On a side note, does pgAdmin or Postgres have a bug tracker like bugzilla/trac/jira/etc?
>

Postgres doesn't. pgAdmin has one, but it's readonly for most people.
Usually, I put in it each bug I'm able to reproduce. It's available at
http://code.pgadmin.org/, and your issue is here:
http://code.pgadmin.org/trac/ticket/240

Thanks for your report.


--
Guillaume
 http://www.postgresql.fr
 http://dalibo.com

pgadmin-support by date:

Previous
From: Christopher A Hotchkiss
Date:
Subject: Trigger Display Bugs in 1.12 pgAdmin
Next
From: Dave Page
Date:
Subject: Re: Trigger Display Bugs in 1.12 pgAdmin