FAQ
Hello,
I am writing my first trigger in C for PostgreSQL. It compiles Ok, and
added it to the database using CREATE TRIGGER. But when I try to fire
it, psql simply says 'The connection was lost". What I don't know is how
to get the row values (not the name fields) from tg_trigger.
The code is:

...

TriggerData *trigdata = (TriggerData *) fcinfo->context;

...

strcpy(query, "INSERT INTO visita_log VALUES ('");
strcat(query, trigdata->tg_trigger->tgargs[0]);
strcat(query, "','");
strcat(query, trigdata->tg_trigger->tgargs[1]);
strcat(query, "','");
strcat(query, trigdata->tg_trigger->tgargs[2]);
strcat(query, "','");
strcat(query, trigdata->tg_trigger->tgargs[3]);
strcat(query, "',");
strcat(query, trigdata->tg_trigger->tgargs[4]);
strcat(query, ",'");
strcat(query, trigdata->tg_trigger->tgargs[5]);
strcat(query, "');");


SPI_exec(query, 0);

...

I don't know if tgargs[] return the row values or the field names.

Thanks.


Juan

Search Discussions

  • Alvaro Herrera at Jul 2, 2004 at 3:26 pm

    On Fri, Jul 02, 2004 at 07:36:50AM -0300, Juan Jose Costello Levien wrote:

    I am writing my first trigger in C for PostgreSQL. It compiles Ok, and
    added it to the database using CREATE TRIGGER. But when I try to fire
    it, psql simply says 'The connection was lost".
    Most likely the server process crashed. See the server log and the core
    file for details to debug your function.

    --
    Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
    La web junta la gente porque no importa que clase de mutante sexual seas,
    tienes millones de posibles parejas. Pon "buscar gente que tengan sexo con
    ciervos incendiánse", y el computador dirá "especifique el tipo de ciervo"
    (Jason Alexander)
  • Juan Jose Costello Levien at Jul 2, 2004 at 3:53 pm
    Alvaro,

    Sorry, but, where are the log file and core you mentioned? I tried
    /var/log/postgresql but is in 0 file size.

    TIA

    On Fri, Jul 02, 2004 at 07:36:50AM -0300, Juan Jose Costello Levien wrote:


    I am writing my first trigger in C for PostgreSQL. It compiles Ok, and
    added it to the database using CREATE TRIGGER. But when I try to fire
    it, psql simply says 'The connection was lost".
    Most likely the server process crashed. See the server log and the core
    file for details to debug your function.

  • Alvaro Herrera at Jul 2, 2004 at 11:07 pm

    On Fri, Jul 02, 2004 at 09:56:43AM -0300, Juan Jose Costello Levien wrote:
    Alvaro,

    Sorry, but, where are the log file and core you mentioned? I tried
    /var/log/postgresql but is in 0 file size.
    Your server may be misconfigured (most linux distros are). Make sure
    your init script does not redirect postmaster's (or pg_ctl's)
    stdout/stderr to /dev/null. Also make sure that if you are using
    syslog, the syslog server is configured to save the messages somewhere
    useful, by checking the facility Postgres uses (configurable) and where
    does syslog save messages from this facility.

    The core file, on the other hand, should be somewhere in
    /var/lib/pgsql/data/base (if you haven't changed PGDATA), _unless_ the
    server runs under a core 0-byte limit (under bash, ulimit -c will tell
    you).

    Hope this helps,

    --
    Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
    "Java is clearly an example of a money oriented programming" (A. Stepanov)
  • Tom Lane at Jul 2, 2004 at 4:48 pm

    Juan Jose Costello Levien writes:
    I don't know if tgargs[] return the row values or the field names.
    Neither --- it's the (fixed) arguments you used in the CREATE TRIGGER
    command. You'll need to do something involving extracting field values
    from the tuple that is passed to the trigger, instead.

    I'd suggest looking in the contrib/ modules for examples of triggers
    written in C.

    regards, tom lane

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-general @
categoriespostgresql
postedJul 2, '04 at 1:32p
activeJul 2, '04 at 11:07p
posts5
users3
websitepostgresql.org
irc#postgresql

People

Translate

site design / logo © 2023 Grokbase