我是postgresql的新手,在执行大型处理时我需要有关策略的帮助。
我有持有发票的表,此发票表中的记录需要“发布”到多个表中,比如销售表和收入表。 此发票表将由多个用户同时访问,当用户“发布”发票表中的特定记录时,我希望阻止其他用户进行更改和“发布”,直到第一个完成“发布”用户。我该怎么做呢?我应该在交易中包装“发布”吗?
谢谢
感谢Stepel和Landa回复并抱歉不清楚。
这是我目前在Foxpro中使用的编码。
Select InvHeader
If !Rlock()
Return
EndIf
Select InvDetail
Scan
do processing and verification
..
Insert Into tAr ... &&& temporary AR table
Insert Into tGl ... &&& temporary GL table
EndScan
*** the reason I am using temporary table is that at this stage, the use may
print out the detail of invoices that are to be posted and can then decide
whether to proceed to commit the transaction.
Select InvHeader
Replace InvHeader.Posted With .T.
Select tAr
Scan
do processing ...
Insert Into Ar (....
EndScan
Select tGl
Scan
do processing ...
Insert Into GL ( ...
EndScan
Begin Transaction
Select Ar
If !TableUpdate()
Rollback
Return
EndIf
Select Gl
If !TableUpdate()
Rollback
Return
EndIf
Select InvHeader
If !TableUpdate()
Rollback
Return
EndIf
** everything is ok the commit
End Transaction
Return
我应该使用plpgsql在服务器上执行此发布过程吗?或者Foxpro代码和SqlExec()语句的组合?有没有更好的方法来实现这一目标?
感谢。
答案 0 :(得分:0)
是的,你应该使用交易。在这种情况下,最敏感的是发票标题的ID。如果你使用
INSERT INTO invoice_header_table VALUES (..) RETURNING id;
您拥有发票标题的唯一ID。
我不确定这是不是你的观点,但我希望这些信息有用。