pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Robins Tharakan <tharakan@gmail.com>
To: Tiziano Slack <slack83@hotmail.it>
Cc: pgsql-sql@postgresql.org
Subject: Re: TG_TABLE_NAME as identifier
Date: Tue, 5 Feb 2008 15:37:31 +0530
Message-ID: <36af4bed0802050207t27948f7bh754b5b25762302d7@mail.gmail.com> (raw)
In-Reply-To: <BAY109-W28A8D4A3264086A0C38DA5CE2C0@phx.gbl>
References: <BAY109-W28A8D4A3264086A0C38DA5CE2C0@phx.gbl>

Hi,

I am not sure if this'd help :

1. Are you sure that the sequence and the tablename have the same name ?
[The insert statement is seeing the insert target identifier as a variable]

2. In case you need to run the  [INSERT INTO '|| TG_TABLE_NAME ||' SELECT
NEW.* ] statement you could always use EXECUTE to run concatenated strings.

3. Unrelated, but as an advice, I always recommend giving field names while
inserting and intentionally try and and avoid insert statements such as
INSERT INTO xxx SELECT * .

*Robins*


---------- Forwarded message ----------
From: Tiziano Slack <slack83@hotmail.it>
Date: Feb 5, 2008 2:15 PM
Subject: [SQL] TG_TABLE_NAME as identifier
To: pgsql-sql@postgresql.org


Hello everybody! I'm newbie to plpgsql syntax. Can anyone tell where I'm
getting wrong?

CREATE OR REPLACE FUNCTION tr_audit() RETURNS TRIGGER AS $tr_audit$
    BEGIN
        IF (TG_OP = 'UPDATE') THEN
        ...
        NEW.id = nextval(TG_TABLE_NAME || '_id_seq'::regclass);
        INSERT INTO TG_TABLE_NAME SELECT NEW.*;
        ELSIF (TG_OP = 'INSERT') THEN
        ...
        END IF;

        RETURN NULL;
    END;
$tr_audit$ LANGUAGE 'plpgsql';

returns

ERROR:  syntax error at or near "$1"
LINE 1: INSERT INTO  $1  SELECT  $2 .*
                     ^
QUERY:  INSERT INTO  $1  SELECT  $2 .*
CONTEXT:  SQL statement in PL/PgSQL function "tr_audit" near line 8

I tried some variants using INSERT INTO '|| TG_TABLE_NAME ||' SELECT NEW.*
and quote_ident(TG_TABLE_NAME) with no luck! Unfortunately searches on the
Net and old threads on this forum didn't help me.

Hope someone can do this!

Thanks in advance,

Tiziano.

------------------------------
Windows Live Spaces Push the Button! Crea il tuo blog e condividi le tue
esperienze col mondo! <http://pushthebutton2006.spaces.live.com/;

view thread (6+ messages)  latest in thread

Message-ID: <36af4bed0802050207t27948f7bh754b5b25762302d7@mail.gmail.com>
Permalink:  ../36af4bed0802050207t27948f7bh754b5b25762302d7@mail.gmail.com/
Also on:    postgresql.org/message-id/36af4bed0802050207t27948f7bh754b5b25762302d7@mail.gmail.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: tharakan@gmail.com, slack83@hotmail.it
  Subject: Re: TG_TABLE_NAME as identifier
  In-Reply-To: <36af4bed0802050207t27948f7bh754b5b25762302d7@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox