Thread: Trigger/Function problem

Trigger/Function problem

From
"Dan Wilson"
Date:
I'm having problems with a trigger/function and I think it's actually a
system problem but I have no clue how to fix it.  The trigger is supposed to
automatically timestamp the record when it is altered.

I've never used anything more than a sql function before so the plpgsql is
new to me.

Here's the info:

My table:
CREATE TABLE "help" (
   "help_id" int4 DEFAULT nextval('help_id_seq'::text) NOT NULL,
   "keyword" varchar(20) NOT NULL,
   "help_text" text NOT NULL,
   "auto_date" date NOT NULL,
   "title" varchar(50) DEFAULT 'Help Topic',
   "admin" bool DEFAULT 't',
   "site_id" varchar(5) DEFAULT '0',
   CONSTRAINT "help_pkey" PRIMARY KEY ("help_id")
);

My function:
CREATE FUNCTION "f_auto_date"() RETURNS OPAQUE AS '
BEGIN
  NEW.auto_date := ''now'';
  RETURN NEW;
END;
' LANGUAGE 'plpgsql';

My trigger:
CREATE TRIGGER "t_auto_date" BEFORE INSERT OR UPDATE ON "help" FOR EACH ROW
EXECUTE PROCEDURE "f_auto_date"();

I'm totally fine up to this point... then I try this:

UPDATE help SET site_id = 'APW' WHERE help_id = 2;

I get the following error:

NOTICE:  plpgsql: ERROR during compile of f_auto_date near line 1
"RROR:  parse error at or near "

I've tried the sample on the following web page as well:
http://www.postgresql.org/users-lounge/docs/7.0/user/c40874340.htm

And I get the exact same error (except of course the function name is
different). So I'm assuming that it's a problem in my system
configuration... I may be wrong.

I don't know how to fix this or even where to begin.  I do have plpgsql
installed as a language. I'm running PG 7.0.2 on standard RedHat 7 ... not
sure of the Kernel.

Thanks for your help,
-Dan


Re: Trigger/Function problem

From
"Robert B. Easter"
Date:
On Thursday 14 December 2000 21:27, Dan Wilson wrote:
>
> I'm totally fine up to this point... then I try this:
>
> UPDATE help SET site_id = 'APW' WHERE help_id = 2;
>
> I get the following error:
>
> NOTICE:  plpgsql: ERROR during compile of f_auto_date near line 1
> "RROR:  parse error at or near "

Try:

UPDATE help SET site_id = ''APW'' WHERE help_id = 2;

Remember that ' is used to enclose the whole function body.  You have to use
'' to mean a literal '.


--
-------- Robert B. Easter  reaster@comptechnews.com ---------
- CompTechNews Message Board   http://www.comptechnews.com/ -
- CompTechServ Tech Services   http://www.comptechserv.com/ -
---------- http://www.comptechnews.com/~reaster/ ------------

Re: Trigger/Function problem

From
"Robert B. Easter"
Date:
On Thursday 14 December 2000 21:10, Robert B. Easter wrote:
> On Thursday 14 December 2000 21:27, Dan Wilson wrote:
> > I'm totally fine up to this point... then I try this:
> >
> > UPDATE help SET site_id = 'APW' WHERE help_id = 2;
> >
> > I get the following error:
> >
> > NOTICE:  plpgsql: ERROR during compile of f_auto_date near line 1
> > "RROR:  parse error at or near "
>
> Try:
>
> UPDATE help SET site_id = ''APW'' WHERE help_id = 2;
>
> Remember that ' is used to enclose the whole function body.  You have to
> use '' to mean a literal '.

Nevermind.  I should have looked more closely at the message. %-)

--
-------- Robert B. Easter  reaster@comptechnews.com ---------
- CompTechNews Message Board   http://www.comptechnews.com/ -
- CompTechServ Tech Services   http://www.comptechserv.com/ -
---------- http://www.comptechnews.com/~reaster/ ------------

Re: Trigger/Function problem

From
"Dan Wilson"
Date:
If you look at my function definition, you can see that this is not within
the function body.  This is the testing of the trigger which produces the
error.  It's just a plain old SQL statment that initiates the trigger.

-Dan

----- Original Message -----
From: "Robert B. Easter" <reaster@comptechnews.com>

> On Thursday 14 December 2000 21:27, Dan Wilson wrote:
> >
> > I'm totally fine up to this point... then I try this:
> >
> > UPDATE help SET site_id = 'APW' WHERE help_id = 2;
> >
> > I get the following error:
> >
> > NOTICE:  plpgsql: ERROR during compile of f_auto_date near line 1
> > "RROR:  parse error at or near "
>
> Try:
>
> UPDATE help SET site_id = ''APW'' WHERE help_id = 2;
>
> Remember that ' is used to enclose the whole function body.  You have to
use
> '' to mean a literal '.
>


Re: Trigger/Function problem

From
Tom Lane
Date:
"Dan Wilson" <phpPgAdmin@acucore.com> writes:
> I get the following error:
> NOTICE:  plpgsql: ERROR during compile of f_auto_date near line 1
> "RROR:  parse error at or near "

Just like that, eh?  It looks like the parser is spitting up on a \r
in the function text.  Try saving your script with Unix-style newlines.

For 7.1 the plpgsql parser has been fixed to accept DOS-ish newlines,
but for now you gotta be careful...

            regards, tom lane

Re: Trigger/Function problem

From
"Dan Wilson"
Date:
That was it!  Thanks Tom.  I just put this functionality into phpPgAdmin and
of course it is taking the newline char from the browser's OS.

Thanks for all your help!

-Dan



> "Dan Wilson" <phpPgAdmin@acucore.com> writes:
> > I get the following error:
> > NOTICE:  plpgsql: ERROR during compile of f_auto_date near line 1
> > "RROR:  parse error at or near "
>
> Just like that, eh?  It looks like the parser is spitting up on a \r
> in the function text.  Try saving your script with Unix-style newlines.
>
> For 7.1 the plpgsql parser has been fixed to accept DOS-ish newlines,
> but for now you gotta be careful...
>
> regards, tom lane