louis gonzales wrote:

Dear Hubert,
Two things
1) _*"statement-level" and "row-level" straight from PostgreSQL: http://www.postgresql.org/docs/8.1/interactive/trigger-datachanges.html*_

   *

      _*Statement-level triggers*_ follow simple visibility rules:
      none of the changes made by a statement are visible to
      statement-level triggers that are invoked before the statement,
      whereas all modifications are visible to statement-level after
      triggers.

   *

      The data change (insertion, update, or deletion) causing the
      trigger to fire is naturally /not/ visible to SQL commands
      executed in a row-level before trigger, because it hasn't
      happened yet.

   *

      However, SQL commands executed in a row-level before trigger
      /will/ see the effects of data changes for rows previously
      processed in the same outer command. This requires caution,
      since the ordering of these change events is not in general
      predictable; a SQL command that affects multiple rows may visit
      the rows in any order.

   *

      When a _*row-level*_ after trigger is fired, all data changes
      made by the outer command are already complete, and are visible
      to the invoked trigger function.

2) Seeing as you have no idea - not attacking, stating fact - on the rationale behind the "insert statement-level" to create 1-to-1 table for each statement-level insert, I'd say your presumption is unfounded. If you have some benchmark data, which support why/how to quantify, 50K records in a single table, all of which would have N number of associated records in another table, would out perform 50K records in a single table referencing dedicated 'small' tables, please do share.

Thanks though.

hubert depesz lubaczewski wrote:

On 3/16/07, louis gonzales <[EMAIL PROTECTED]> wrote:

I want to write a *statement-level* trigger - one that happens once per
statement - such that, immediately after an insert into a table(which
gets a unique integer value as an ID from a defined sequence, being the
primary key on the table), a new table is created with foreign key
constraint on that unique ID.


hi,
i think what you;re trying to do is wrong - having that many tables
simply cannot work properly.
additionally - i think you're misinformed. the kind of action you
would like to "trigger on" is not "per statement" but "per row".
example:
insert into table x (field) select other_field from other_table;
if this insert would insert 10 records - "once per statement" trigger
would be called only once.

but anyway - what you're proposing will lead to many, many problems.
(plus it will never scale correctly).

depesz



--
Email:    [EMAIL PROTECTED]
WebSite:  http://www.linuxlouis.net
"Open the pod bay doors HAL!" -2001: A Space Odyssey
"Good morning starshine, the Earth says hello." -Willy Wonka


--
Email:    [EMAIL PROTECTED]
WebSite:  http://www.linuxlouis.net
"Open the pod bay doors HAL!" -2001: A Space Odyssey
"Good morning starshine, the Earth says hello." -Willy Wonka


---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to