使用 UDF 获取列 postgresql 的值
Using UDF for value of a column postgresql
假设我已经有 2 table 部电影及其评分。
CREATE TABLE public.movies (
movieid int4 NOT NULL,
averagerating float4 NULL,
title varchar(255) NOT NULL,
"year" int4 NULL,
CONSTRAINT movies_pkey PRIMARY KEY (movieid)
);
CREATE TABLE public.ratings (
movie_id int4 NOT NULL,
user_id int4 NOT NULL,
rating float4 NOT NULL,
timestmp varchar(255) NOT NULL,
CONSTRAINT ratings_pkey PRIMARY KEY (movie_id, user_id),
CONSTRAINT fk44trpo3u915t27ybt03ib4h0o FOREIGN KEY (movie_id) REFERENCES movies(movieid),
CONSTRAINT fk7ymub8kd95i2xlklgole3i684 FOREIGN KEY (user_id) REFERENCES usrs(userid)
);
目前,电影 中的 averagerating 列到处都是空的。我想将我的 UDF average_movie_rating 附加到此列
类似于update movies set averagerating = average_movie_rating(movies.movieid)
这个函数:
create or replace function average_movie_rating(movieid integer)
returns float8 as $averagerating$
declare
averagerating float8;
begin
select avg(r.rating) into averagerating from ratings r where r.movie_id = ;
return averagerating;
end
$averagerating$ language plpgsql;
是否可行?如果可行,我如何将此 movieid 传递给函数?
除非出于性能原因需要,否则您应该在 select 从数据库中计算该值。如果你必须坚持它,请在 ratings
上使用触发器来修改 movies
.
假设我已经有 2 table 部电影及其评分。
CREATE TABLE public.movies (
movieid int4 NOT NULL,
averagerating float4 NULL,
title varchar(255) NOT NULL,
"year" int4 NULL,
CONSTRAINT movies_pkey PRIMARY KEY (movieid)
);
CREATE TABLE public.ratings (
movie_id int4 NOT NULL,
user_id int4 NOT NULL,
rating float4 NOT NULL,
timestmp varchar(255) NOT NULL,
CONSTRAINT ratings_pkey PRIMARY KEY (movie_id, user_id),
CONSTRAINT fk44trpo3u915t27ybt03ib4h0o FOREIGN KEY (movie_id) REFERENCES movies(movieid),
CONSTRAINT fk7ymub8kd95i2xlklgole3i684 FOREIGN KEY (user_id) REFERENCES usrs(userid)
);
目前,电影 中的 averagerating 列到处都是空的。我想将我的 UDF average_movie_rating 附加到此列
类似于update movies set averagerating = average_movie_rating(movies.movieid)
这个函数:
create or replace function average_movie_rating(movieid integer)
returns float8 as $averagerating$
declare
averagerating float8;
begin
select avg(r.rating) into averagerating from ratings r where r.movie_id = ;
return averagerating;
end
$averagerating$ language plpgsql;
是否可行?如果可行,我如何将此 movieid 传递给函数?
除非出于性能原因需要,否则您应该在 select 从数据库中计算该值。如果你必须坚持它,请在 ratings
上使用触发器来修改 movies
.