让我们说我有一个兽医应用程序,并且有2个数据库(让我们说医生执行操作):
包含字段的用户数据库: ID,电子邮件,名称,密码和regStamp。
PetOperations数据库,包含字段: id,id(对用户的引用),doctorName,operationStamp和operationStatus。
如果我想在Pet数据库中放入一个新的petOperation时更新一个operationStatus字段怎么办?初始状态是20分钟后PERFOMING变为PERFORMED,但仅限于此唯一operationId,如果currentTime - operationStamp> = 20)。我怎样才能做到这一点?也许,有更好的方式而不是减法时间?
答案 0 :(得分:0)
我认为您需要重新考虑一下您的数据模型。据我了解您的问题,您有已安排的操作,并且您希望将它们视为在计划的时间片完成后执行。
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;
$$;
然后你可以搜索这个。如果您需要不同的长度间隔,您可以在更新时间指定它们。
答案 1 :(得分:0)
我不确定你想做什么。
如果您只想在operationstatus
行时设置初始INSERT
,请使用BEFORE INSERT
触发器。
如果希望值根据选择的时间而改变,请使用“计算列”,即不要在表中定义列,而是在包含列的表上定义视图,酌情计算。