Not being the author of that view, I confess some ignorance of pg
internals, and just what the intended nuance was.

As a little more explanation, the view is meant to list all the tables that
have a trigger ending in _alert_notify, as created per this function:

CREATE OR REPLACE FUNCTION alert_notify_enable(varchar,varchar) RETURNS
boolean AS $$
        if {[info exists 1]} {
            set TABLE $1
        } else {
            elog ERROR "no table passed to alert_notify()"
            return false
        }
        if {[info exists 2]} {
            set CUSTOM_COLUMN  $2
        } else {
            set CUSTOM_COLUMN ""
        }
        set cre_exec  "CREATE TRIGGER ${TABLE}_alert_notify
        AFTER INSERT OR UPDATE OR DELETE ON ${TABLE}
        FOR EACH ROW EXECUTE PROCEDURE table_alert_notify(${CUSTOM_COLUMN})"
        spi_exec $cre_exec
        return true
$$ LANGUAGE pltcl;

(The second view, about table_logs, is conceptually similar).

Here's the slightly more readable source for the view:


CREATE OR REPLACE VIEW alert_notify_enabled_objects AS

SELECT REPLACE(cc.relname,'tbl_','') AS alert_object_code,
        INITCAP(REPLACE(REPLACE(cc.relname,'tbl_',''),'_',' ')) AS
description
FROM pg_catalog.pg_trigger t
     LEFT JOIN pg_catalog.pg_class cc ON ( t.tgrelid = cc.oid )
WHERE t.tgname ~ '_alert_notify$'
        AND (NOT tgisconstraint  OR NOT EXISTS
                   (SELECT 1 FROM pg_catalog.pg_depend d
                             JOIN pg_catalog.pg_constraint c ON
(d.refclassid = c.tableoid AND d.refobjid = c.oid)
                        WHERE d.classid = t.tableoid AND d.objid = t.oid
AND d.deptype = 'i' AND c.contype = 'f')
        );

If that clarifies the intention, please let me know!  Also, what about
question #2--is there an easy/built-in way to edit the
pg_upgrade_dump_db.sql and continue the postgresql-upgrade process?

Thanks!

Ken

On Sat, Nov 19, 2011 at 7:44 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Ken Tanzer <ken.tan...@gmail.com> writes:
> > 1)  Can anyone suggest equivalent PG9 replacement for those statements,
> or
> > at least give me some hints?
>
> Per
> http://git.postgresql.org/gitweb/?p=postgresql.git&a=commitdiff&h=9a915e596
>
>        I also replaced the tgisconstraint column
>        with tgisinternal; the old meaning of tgisconstraint can now be had
> by
>        testing for nonzero tgconstraint, while there is no other way to get
>        the old meaning of nonzero tgconstraint, namely that the trigger was
>        internally generated rather than being user-created.
>
> It's not real clear to me whether your views actually want tgconstraint
> = 0, which would be the exact translation, or NOT tgisinternal, which
> might be a closer approximation to their intention.
>
>                        regards, tom lane
>

Reply via email to