時插入一些東西我對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