Postgres-每个会话运行限制程序

时间:2018-09-27 01:07:35

标签: postgresql

我遇到了一个按日期进行“预煮”程序的情况。如果该日期的数据是正确的,则只需将其返回即可,否则该过程将对其进行自动校准。

问题在于,如果烹饪过程花费的时间太长,则可能会重复复制数据。

我希望这个工作流程:

  1. 用户A从Web应用程序打开一个会话,并请求2018年6月的数据,名为proc_A的过程将检查该月的数据并将其烹饪(如果尚不存在)。 / p>

  2. 用户B从桌面应用打开另一个会话,并请求2018年6月的相同数据,然后他们应该收到一条消息,说数据正在准备中,请稍候。

是否可以仅通过在PostgreSQL数据库中进行更改而不是对Web应用程序和桌面应用程序进行更改来实现?

1 个答案:

答案 0 :(得分:1)

我会在数据表中添加一个状态列:

ready boolean DEFAULT FALSE

工作流程如下:

INSERT INTO data (month, value, ready)
   VALUES (date_trunc('month', current_timestamp)::date, NULL, FALSE)
ON CONFLICT (month) DO NOTHING;

如果插入一行,则继续烹饪该值,然后运行

UPDATE data SET
   value = 42, ready = TRUE
WHERE month = date_trunc('month', current_date)::date;

如果第一条语句未插入任何行,请运行

SELECT value, ready
FROM data
WHERE month = date_trunc('month', current_date)::date;

如果ready为真,则返回数据,否则,告诉客户端请等待。

相关问题