On 7/31/06, Worky Workerson <worky.workerson@gmail.com> wrote:
> I'm trying to trigger a whole bunch of partitions at once (initial DB
> setup) using the same plpgsql trigger. The trigger is basically the
> merge trigger in the docs (i.e. UPDATE IF NOT FOUND RETURN NEW ...).
>
> I need to use the TG_RELNAME variable within the "UPDATE" in the
> trigger so that I can use the same function to trigger all of the
> partitions (correct?), the problem is that I can't quite figure out
> how. I figure that I will have to use EXECUTE on a string that I
> build up, right? The problem that I'm having with this approach is
> that some of the columns of NEW don't have a text conversion, and I'm
> getting an error whenever the trigger fires. Is there a way around
> this and/or a better way to trigger a bunch of partitions with the
> same function?
I don't think it's possible. however, what is possible and achieves
roughly the same affect is to query the system catalogs (or
information schema) and via dynamic sql cut trigger
funtions/procedures by looping the results of your query. non-dynamic
sql will usually be a bit faster than dynamic as a bonus, the only
downsie is you are creating a lot of functions, albeit in easy to
manage fashion. If you are really clever, you can put your trigger
functions in a special schema for organizational purposes.
to do this the 'functional' way:
create or replace function create_trigger_for_table(table_name text,
schema_name text) returns void as
$$
begin
excecute 'create or replace function ' -- and so forth
end;
$$;
and to invoke the function:
select create_trigger_for_table(table_name , schema_name ) from
information_schema.tables -- and so forth
regards,
merlin