From: | "Bob Pawley" <rjpawley(at)shaw(dot)ca> |
---|---|
To: | "Adrian Klaver" <adrian(dot)klaver(at)gmail(dot)com> |
Cc: | "Alan Hodgson" <ahodgson(at)simkin(dot)ca>, <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Trouble with NEW |
Date: | 2012-07-19 13:43:25 |
Message-ID: | 44B8C36C2BC04ACEA3270E0E34090893@BobPC |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
The function is too long to copy.
I separated it into another trigger function with just the update statement.
Here is the error -
ERROR: record "new" has no field "fluid_id"
SQL state: 42703
Context: SQL statement "update p_id.fluids
set fluid_short =
(select shape.text
from shape, num_search
where (select st_within(shape.wkb_geometry,
st_geometryn(num_search.the_geom4, 1)) = 'true')
and text !~ '[0-9]')
---------------------------------------------------------
Here is the trigger function -
CREATE OR REPLACE FUNCTION fluid_name()
RETURNS trigger AS $$
begin
update p_id.fluids
set fluid_short =
(select shape.text
from shape, num_search
where (select st_within(shape.wkb_geometry,
st_geometryn(num_search.the_geom4, 1)) = 'true')
and text !~ '[0-9]')
where p_id.fluids.fluid_id = NEW.fluid_id;
RETURN NULL;
End;
$$ LANGUAGE plpgsql;
create trigger r_fluidname after insert on project.project
for each row execute procedure fluid_name();
--------------------------------------------
Here is the trigger script -
-- Trigger: r_fluidname on project.project
-- DROP TRIGGER r_fluidname ON project.project;
CREATE TRIGGER r_fluidname
AFTER INSERT
ON project.project
FOR EACH ROW
EXECUTE PROCEDURE public.fluid_name();
--------------------------------------------
Here is the function script -
-- Function: public.fluid_name()
-- DROP FUNCTION public.fluid_name();
CREATE OR REPLACE FUNCTION public.fluid_name()
RETURNS trigger AS
$BODY$
begin
update p_id.fluids
set fluid_short =
(select shape.text
from shape, num_search
where (select st_within(shape.wkb_geometry,
st_geometryn(num_search.the_geom4, 1)) = 'true')
and text !~ '[0-9]')
where p_id.fluids.fluid_id = NEW.fluid_id;
RETURN NULL;
End;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.fluid_name()
OWNER TO postgres;
------------------------------------
Here is the triggering table -
-- Table: project.project
-- DROP TABLE project.project;
CREATE TABLE project.project
(
p_id_id serial NOT NULL,
p_id_name character varying(75),
project_name character varying(75),
project_id integer,
number_of_processes integer,
p_id_number character varying(30),
CONSTRAINT project_pkey PRIMARY KEY (p_id_id ),
CONSTRAINT name_ UNIQUE (p_id_name )
)
WITH (
OIDS=FALSE
);
ALTER TABLE project.project
OWNER TO postgres;
-- Trigger: pidnum on project.project
-- DROP TRIGGER pidnum ON project.project;
Help would be appreciated.
Bob
-----Original Message-----
From: Adrian Klaver
Sent: Wednesday, July 18, 2012 5:47 PM
To: Bob Pawley
Cc: Alan Hodgson ; pgsql-general(at)postgresql(dot)org
Subject: Re: [GENERAL] Trouble with NEW
On 07/18/2012 03:20 PM, Bob Pawley wrote:
> When I substitute new.fluid_id for the actual fluid)id the expression
> returns the right value.
Huh? I thought that was what was causing the problem. From your original
post:
"
where p_id.fluids.fluid_id = NEW.fluid_id;
I receive an error ”record “new” has no field “fluid_id” “.
"
Per previous suggestion can we see?:
1)The trigger definition
2) The function.
--
Adrian Klaver
adrian(dot)klaver(at)gmail(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2012-07-19 13:50:01 | Re: Trouble with NEW |
Previous Message | Daniele Varrazzo | 2012-07-19 13:13:47 | Handling error during async query |