2012-12-01 69 views
2

我需要使兩個會話(兩個文件)同時運行(同時)。有沒有辦法做到這一點使用pg_sleep或像「delayExecutionUntil(x_time)」一些其他功能?PostgreSQL - 使兩個事務同時運行

+0

如果我們進行測試,請讓測試應用程序或OS同時啓動多個請求。如果這種方式不能可靠地工作,那麼就要轟炸服務器,直到遇到你想要的情況爲止 – Bohemian

+0

是的,這就是我想知道的,怎麼可能在postgres中同時啓動多個請求? – Lebowski156

+1

您需要打開兩個連接。每次交易一次 –

回答

2

要在幾乎完全相同的時間獲得兩個事務,您可以在一個Linux shell中同時調度psql的兩個或多個調用at command

像:

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

(所需的時間戳格式可能取決於你的系統區域設置。)
script.sql包含類似:

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

只是多了很多行招惹碰撞後你是..

+0

太棒了,所以如果我爲兩個不同的客戶做這件事,他們都會在那個時候運行?我假設他們是否在同一個客戶端,他們不能同時運行。 – Lebowski156

+0

@ Lebowski156:如果兩次啓動'psql',那麼這兩個腳本*將*同時運行。 –

1

你可以使用表鎖(見LOCK comman d在文檔中)同步的東西:

  • 連接「控制器」鎖定真實交易將使用的第一個表。
  • 創建新的「Worker-A」連接並開始交易。它會阻塞在鎖定的桌子上。
  • 創建新的「工人-B」連接並開始您的交易。它會阻塞在鎖定的桌子上。
  • 「控制器」連接釋放鎖。
  • 「Worker-A」和「Worker-B」應立即開始工作 - 如果它們的併發設置允許這樣做。