Оператор 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. Но я хотел просто подтвердить это тем, у кого больше опыта. Благодарю.