[英]How do I update a value in a table in PostgreSQL on a schedule?
假設我有一個獸醫應用程序,並且有2個數據庫(假設醫生執行手術):
用戶數據庫,包含以下字段: ID,電子郵件,名稱,密碼和regStamp。
PetOperations數據庫,具有以下字段: id,id(對用戶的引用),doctorName,operationStamp和operationStatus。
每當有人將新的petOperation放入Pet數據庫時(如果初始狀態為PERFOMING,在20分鍾后它將變為PERFORMED,但僅針對此唯一的operationId,如果currentTime-operationStamp> = 20),我想更新operationStatus字段怎么辦? 我怎樣才能做到這一點? 也許有比減時間更好的方法了嗎?
我認為您需要重新考慮一下數據模型。 據我了解您的問題,您有已計划的操作,並且您希望將其視為在計划的時間片完成后執行。
PostgreSQL沒有本機工具可以在20分鍾內更新值。 您可以使用cron作業,但是我認為更優雅的解決方案是更改數據模型。
添加一個“表方法”,您將獲得狀態計算。
假設您的表現在包含:
id, id(reference to user), doctorName, operationStamp, operationTsrange
然后創建一個類似以下的函數:
create or replace function status(operation) returns text language sql
as $$
select case when $1.operationTsrange is null then 'Not Scheduled'
when now() << $1.operationTsrange THEN 'Scheduled'
when now() <@ $1.operationTsrange THEN 'Performing'
when now() >> $1.operationTsrange THEN 'Performed'
END;
$$;
然后,您可以對此進行搜索。 如果需要不同的長度間隔,可以在更新時間指定它們。
我不確定您要做什么。
如果只想在INSERT
一行時設置初始operationstatus
狀態,請使用BEFORE INSERT
觸發器。
如果要根據選擇的時間來更改值,請使用“計算列”,即,不要在表中定義該列,而是在包含該列的表上定義一個視情況而定的視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.