尝试从Greenplum运行SQL事务时。得到这个错误。
Transaction (Process ID 52) was deadlocked on lock resources with
another process and has been chosen as the deadlock victim.
Rerun the transaction.
我们尝试过:
在SQL服务器上它正在工作但我们想在greenplum上编写相同的事务
Transaction A
RETRY: -- Label RETRY
BEGIN TRANSACTION
BEGIN TRY
truncate table tablename
WAITFOR DELAY '00:00:05' -- Wait for 5 ms
Insert into tablename
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Rollback Transaction'
ROLLBACK TRANSACTION
IF ERROR_NUMBER() = 1205 -- Deadlock Error Number
BEGIN
WAITFOR DELAY '00:00:00.05' -- Wait for 5 ms
GOTO RETRY -- Go to Label RETRY
END
END CATCH
输出:
IT包括
用greenplum语法转换提到的sql事务(retry和try / catch)块。
由于进程ID不断变化,在进入事务时要避免使用硬编码值。
3.另外,我试图理解这个错误属于我们用greenplum编写的SQL SERVER OR事务。
talend中的数据流是:
**Read from MS SQL SERVER >> write into hdfs >> load into greenplum**
对此有任何帮助将不胜感激?
答案 0 :(得分:1)
您无法在Greenplum的交易中开始或结束交易。它会自动提交或自动回滚。
多版本并发控制,始终存在数据一致性,并且查询始终在并行机制中按顺序执行。
重试: - 标签重试 BEGIN
truncate table tablename
select pg_sleep(5) -- Wait for 5 ms
Insert into tablename
RAISE INFO 'Rollback Transaction'
IF ERROR_NUMBER = 1205 -- Deadlock Error Number
THEN
select pg_sleep(5) -- Wait for 5 ms
-- Go to Label RETRY
END