我有一个作业列表,可以在2-3台不同的机器上按时间执行。因此,任何机器都可以挑选任何作业并执行它,只要它的next_execution_time < current_time。我将所有作业存储在一个数据库表中,并使用SELECT.... FOR UPDATE中的SQL来选择要执行的作业。但这种方法的问题是,如果一个machine1选择了一个作业,因为只有写锁,其他机器也会选择执行相同的作业,但不能执行,因为它们将等待锁释放或发生锁超时。那么有没有办法让其他机器跳过这个作业,使用SQL锁</e
我有一个遗留代码,它执行以下操作:ALTER TABLE C RENAME TO A;它正在交换两个表A问题:第三个alter table DDL抛出错误:我不明白在前两个DDL之后怎么会有锁?此时,每个事务都应该已经提交。在交换过程中,不可能有其他会话更改了这些表的数据--首先是非常短的操作,其次--实际上只使用了一个表(表A),第二个更像是存档,所以没有人在上面
该函数生成对极其重要的资源(表)的记录插入。此外,它在执行时执行一些select/update/etc操作。会发生这种情况,因为这两个事务都是并行执行的,并且不知道正在准备在并行事务中插入相同的记录。表非常重要,所有类型的LOCK TABLE都非常不受欢迎(同时,LOCK FOR SHARE MODE也提供了一些有用的经验)。因此,问题是,如何组织PL/pg