Оператор SELECT молча умирает - postgresql

Я тестирую различия между SELECT и SELECT FOR UPDATE в postgresql. Одна вещь, которую я заметил с инструкциями SELECT, это то, что когда происходит блокировка или конфликт, postgresql "кажется" тихо умирает. Рассмотрим следующий скрипт:

require("luasql.postgres")

-- GLOBAL DECLARES --
local con
local env
local databasename = "XXXX"
local databaseUser = "XXXX"
local databasepassword = "XXXX"
local databaseserver="xx.xx.xx.xx" 
local databaseport = 5432 

local databaseconnect = function()
   if not con then
      -- create environment object   
      env = assert (luasql.postgres())
      con = assert (env:connect(databasename, databaseUser, databasepassword, databaseserver))   
      return true
   else
      return false 
   end
end

local escape = function(sql)
     sql = sql or ""
     return con:escape(sql)
end

local databasedisconnect = function()
   if env then
      env:close()
      env = nil
   end
   if con then
      con:close()
      con = nil
   end
end

local userid, servername = ...

--CONNECT TO DATABASE
if not con then databaseconnect() end

print(now)
sql = "UPDATE tbl_availablenumbers SET UsedYesNo = true, user_id="..userid..", updateddatetime='"..os.date("%Y-%m-%d %H:%M:%S").."' WHERE reservationnumber =("
      .."SELECT reservationnumber FROM tbl_availablenumbers WHERE UsedYesNo=false Order By id ASC Limit 1 ) RETURNING reservationnumber"

print('Attempting to update tbl_availablenumbers table...')
assert(con:execute(sql))       

--DISCONNECT FROM DATABASE
if con then databasedisconnect() end
print("Goodbye")

Я предполагал, что если произошел какой-либо сбой, когда обновление не работает, postgresql вернет сообщение.

Вот что я делаю. Я создал скрипт-обертку для вышеуказанной логики, которая будет вызывать его X раз. Сейчас я пытаюсь запустить его 100 раз. Затем я запускаю эти сценарии с 2 разных серверов в одной базе данных. Я знаю, что есть сбои / проблемы с блокировкой, потому что после выполнения обоих операторов у меня нет 200 записей. Сессия 1 создает, например, 99, а другая 65. Мой вопрос: почему я не получаю уведомления о сброшенных транзакциях? Я прочитал кое-что о предложении NOWAIT. Это как-то связано с этим? Я еще не слишком знаком с postgresql и сравнивал его с другими базами данных, такими как mysql и ms sql server, где есть параметр конфигурации, определяющий, как долго ждать в условиях гонки.

Возможно, все, что мне нужно, это NOWAIT. Но я хотел просто подтвердить это тем, у кого больше опыта. Благодарю.

0 ответов

Другие вопросы по тегам