Database SELECT语句-postgresql

Database SELECT语句-postgresql,database,concurrency,transactions,lua,luasql,Database,Concurrency,Transactions,Lua,Luasql,我正在测试postgresql中SELECT和SELECT FOR UPDATE之间的差异。 我在SELECT语句中注意到的一点是,当锁或争用发生时,postgresql似乎正在悄然消亡。 考虑下面的脚本: require("luasql.postgres") -- GLOBAL DECLARES -- local con local env local databasename = "XXXX" local databaseUser = "XXXX" local databasepasswo

我正在测试postgresql中SELECT和SELECT FOR UPDATE之间的差异。 我在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次。然后,我从两个不同的服务器对同一个数据库运行这些脚本。 我知道存在失败/锁定问题,因为在两个语句运行后,我总共没有200条记录。例如,会话1创建99和其他65。 我的问题是,为什么没有通知我已删除的事务? 我读了一些关于NOWAIT条款的内容。这与此有关吗? 我对postgresql还不太熟悉,一直在将它与其他数据库(如mysql和ms sql server)进行比较,后者有一个配置设置,可以定义在竞争条件下等待的时间

也许我所需要的只是NOWAIT。但我只是想和一个更有经验的人确认一下。
谢谢

我是否遗漏了什么,我看不到查询?查询位于脚本的底部。我正在设置一个名为SqlPerbable duplicate:1的变量。databasedisconnect函数应该首先关闭连接,然后关闭环境。2.可能您可以手动完成事务,例如cnn:setautocommitfalse assertcnn:commit