当尝试从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
输出:
它包括
在绿梅语法中转换提到的sql事务(重试和尝试/捕获(块。
由于进程ID不断变化,希望避免在传递到事务时硬编码值。
3.另外,我试图理解此错误属于SQL SERVER或我们在Greenplum中编写的事务。
数据流是:
**Read from MS SQL SERVER >> write into hdfs >> load into greenplum**
任何帮助将不胜感激?
您不能在 Greenplum 中的事务中开始或结束事务。它会自动提交或自动回滚。
多版本并发控制,始终存在数据一致性,并且查询始终在并行机制中按顺序执行。
重试: -- 标签重试开始
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