0

当尝试从 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

输出 :

这包括

  1. 使用 greenplum 语法转换提到的 sql 事务(重试和 try/catch)块。

  2. 随着进程 ID 不断变化,在传递到事务时要避免硬编码值。

3.另外,我试图理解这个错误属于我们用greenplum编写的SQL SERVER OR transaction。

talend中的数据流为:

**Read from MS SQL SERVER >> write into hdfs >> load into greenplum** 

任何帮助将不胜感激?

4

1 回答 1

1

您不能在 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
于 2017-10-20T12:13:16.203 回答