Re: Function xxxx() does no exist
Re: Function xxxx() does no exist
Philippe Lefèvre writes:
> So I created:
> CREATE FUNCTION chk_itheme_proc(int4) RETURNS int4
> AS 'SELECT COUNT(i_theme) FROM tbl_theme
> WHERE i_theme = $1;'
> LANGUAGE 'sql';
> and I created a trigger:
> CREATE TRIGGER chk_itheme_trig BEFORE INSERT OR UPDATE ON tbl_article
> FOR EACH ROW EXECUTE PROCEDURE chk_itheme_proc ('theme');
> but I get the message:
> ERROR: CreateTrigger: function chk_itheme_proc() does not exist
Poorly worded error message, I'd say. You have a function
chk_itheme_proc(int4), but the trigger as you show it requires a
function with a signature of chk_itheme_proc(text) or something close
to it. Those are different functions.
The error message ought to print out the expected parameter types to
remind you about that...
regards, tom lane
Function xxxx() does no exist
I've already sent this request for help to the novice mail list but I
never get any answer. So I wonder if it was the good list for that kind
of question and I'm publishing it here.
(thousand of apologies if I'm wrong !)I'm a beginner with postgres and I'm trying to understand how I can
workaround the FOREIGN KEY mechanism within Postgres.I've read that it's not supported yet (before rel 7) and I can use a trigger but I have some trouble with a Function.
So I created:
CREATE TABLE "tbl_article" (
"i_article" serial PRIMARY KEY,
"repere" text,
"refmedia" int4 NOT NULL,
"theme" int4 NOT NULL,
"mot_cle1" int4 NOT NULL,
"mot_cle2" int4,
"mot_cle3" int4);and:
CREATE TABLE "tbl_theme" (
"i_theme" serial PRIMARY KEY,
"theme" text NOT NULL UNIQUE);then:
CREATE FUNCTION chk_itheme_proc(int4) RETURNS int4
AS 'SELECT COUNT(i_theme) FROM tbl_theme
WHERE i_theme = $1;'
LANGUAGE 'sql';and I created a trigger:
CREATE TRIGGER chk_itheme_trig BEFORE INSERT OR UPDATE ON tbl_article
FOR EACH ROW EXECUTE PROCEDURE chk_itheme_proc ('theme');but I get the message:
ERROR: CreateTrigger: function chk_itheme_proc() does not existIf I do:
SELECT theme FROM tbl_article
WHERE chk_itheme_proc(5) = 1; -- i_theme goes from 1 to 12theme
-----
11
(1 row)If I do now:
SELECT theme FROM tbl_article
WHERE chk_itheme_proc(15) = 1;
theme
-----
(0 row)So I can see that the function is available ....
I'm stuck with this issue and I wasn't able to find any help on
documentations.Is there somebody who could help me ???
Many thanks in advance,
PhiL-- ============================================================================== * PhiL is using a Linux Kernel 2.2.14 * ==============================================================================
Re: Function xxxx() does no exist
> Philippe Lefèvre writes:
> > So I created:
> > CREATE FUNCTION chk_itheme_proc(int4) RETURNS int4
> > AS 'SELECT COUNT(i_theme) FROM tbl_theme
> > WHERE i_theme = $1;'
> > LANGUAGE 'sql';
>
> > and I created a trigger:
> > CREATE TRIGGER chk_itheme_trig BEFORE INSERT OR UPDATE ON tbl_article
> > FOR EACH ROW EXECUTE PROCEDURE chk_itheme_proc ('theme');
>
> > but I get the message:
> > ERROR: CreateTrigger: function chk_itheme_proc() does not exist
>
> Poorly worded error message, I'd say. You have a function
> chk_itheme_proc(int4), but the trigger as you show it requires a
> function with a signature of chk_itheme_proc(text) or something close
> to it. Those are different functions.
>
> The error message ought to print out the expected parameter types to
> remind you about that...
No,
trigger procedures in Postgres are allways defined to take no arguments and have a return type "opaque".
The main error above is, that the "sql" language cannot be used to define a trigger!
Use the PL/pgSQL or PL/Tcl languages instead. They're documented in the programmers manual. Version 7.0 will have PL/Perl too, but I don't know if that one can be used for trigger procs yet.
Jan
--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#========================================= wieck@debis.com (Jan Wieck) #