Обсуждение: Trigger/Function problem
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
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/ ------------
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/ ------------
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 '. >
"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
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