时插入一些东西我对SQL和PostgreSQL还是比较陌生的,特别是对于我来说,请在这个裸机上!Postgres规则:当条件为
我有两张表,一张带有电影列表,另一张带有播放每部电影时的日期列表。电影列表具有列name
,id
,start_date
和end_date
,而id是唯一标识符。
显示列表(具有日期的那个)具有id
,movie_id
,date
。
每次我INSERT
一个新节目,我想电影名单进行更新:如果show.date
是movie.start_date
之前,我想的start_date
被更新到show.date
的价值。同样的结束日期 - 显然如果show.date
在movie.end_date
之后。
下面的规则是什么我坚持:(注意:它只会设定开始日期,如果它的工作,让做应该很容易,一旦这个工程的结束日期...)
CREATE RULE "movies_start_date_setter" AS ON INSERT TO "shows"
WHERE movies.id = NEW.movie_id AND movies.start_date < NEW.date
DO (UPDATE movies SET start_date = NEW.date);
它返回:ERROR: missing FROM-clause entry for table "movies"
这个错误不会给我(作为初学者)任何信息,我错过了一个FROM子句和原因。
现在,因为大家似乎认为一个规则是一个坏主意(我倾向于压力)我尝试了一个触发器,这对我来说是完全新的。
使用触发器(强烈推荐)它会是这个样子:
CREATE OR REPLACE FUNCTION adjust_start_date()
RETURNS trigger AS
$BODY$
BEGIN
UPDATE movies SET start_date = NEW.date
WHERE id = NEW.movie_id AND start_date > NEW.date;
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql';
其次:
CREATE TRIGGER adjust_start_date_trigger
AFTER INSERT
ON shows
FOR EACH ROW
EXECUTE PROCEDURE adjust_start_date();
该触发可能会或可能无法正常工作,它解决了我的问题,但不回答我的原始问题... 其他任何人比我更聪明(我当然希望如此!)?
为什么不只是省略'start_date'&计算每当需要加入&MIN(shows.date)'? – pozs
冗余数据的问题:需要将其更新到永恒。 – joop
那么,这将是一个解决方案......尽管学习如何处理规则,但;)出于兴趣,但是,当我每周插入插入内容并在电影中选择时,会更快每分钟至少一次? – Maverick283