PostgreSQL - 使两个事务同时运行

时间:2012-12-01 18:04:17

标签: postgresql concurrency

我需要同时运行两个会话(两个文件)(同时)。有没有办法使用pg_sleep或其他一些函数,如“delayExecutionUntil(x_time)”?

2 个答案:

答案 0 :(得分:2)

要在(几乎)完全相同的时间获得两个事务,您可以在具有psql的Linux shell中同时调度两个或多个at command的调用。

像:

at '08:00 01.12.2012' -f script.sql

(所需的时间戳格式可能取决于您的系统区域设置。)
script.sql包含以下内容的地方:

psql mydb -p 5432 -c "INSERT INTO tbl (col) VALUES ('foo');

只需要更多的行来激发你所追求的碰撞......

答案 1 :(得分:1)

您可以使用表锁(请参阅文档中的LOCK命令)来同步这些内容:

  • 连接“Controller”锁定真实交易将使用的第一个表。
  • 创建新的“Worker-A”连接并启动您的交易。它将阻止锁定的表格。
  • 创建新的“Worker-B”连接并开始您的交易。它将阻止锁定的表格。
  • “Controller”连接释放锁。
  • “Worker-A”和“Worker-B”应该立即开始工作 - 如果它们的并发设置允许这样做的话。