簡體   English   中英

如何按計划更新PostgreSQL表中的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM