使用 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.