【发布时间】:2017-02-20 11:18:16
【问题描述】:
我正在寻找一种在特定时间启动Function 或Transaction 的方法(为了测试并发访问),但我在这里找不到明确的方法PostgreSQL - make two transactions run at the same time,在特定时间用 linux 执行脚本的东西,但如果您使用的是 windows 或其他操作系统,这将无济于事。
我创建了一个简单的方法,但我不确定这是否有问题:
我创建了一个采用start-date 的函数,然后在这个函数中我使用pg_sleep(sleep_time) 阻止我的操作直到那个时候,所以这个想法很简单:
sleep_time = start_date - current_date
函数如下:
CREATE OR REPLACE FUNCTION start__my_job_in_specific_time(start_time timestamp) RETURNS INTEGER AS $$
BEGIN
PERFORM pg_sleep((select extract(epoch from (start_time - (SELECT CURRENT_TIMESTAMP)))));
-- now execute my actions
UPDATE sch_lock.table_concurente set max_value = max_value + 1
WHERE id = (SELECT id FROM sch_lock.table_concurente ORDER BY id DESC LIMIT 1);
RETURN (SELECT MAX(max_value) FROM sch_lock.table_concurente);
END;
$$
LANGUAGE plpgsql;
-- start my function at 2017-02-20 12:03:30
SELECT * FROM start__my_job_in_specific_time('2017-02-20 11:03:30');
这项工作正常,交易在准确的时间工作。
我的问题:在 postgres 中有没有比这更好的类似方法。
【问题讨论】:
标签: sql postgresql concurrency transactions plpgsql