插入 sql 触发器时将 SQL Server 数据导入 PostgreSQL

问题描述

我正在尝试使用 psqlodbc(12_02_0000-x64) odbc 驱动程序和 Postgresql 作为本地计算机上 SSMS 中的链接服务器,将数据从 MS sql Server (2014) 移动到 Postgresql (12.6)。

目标是通过在 sql server 表上使用插入触发器将插入到 sql Server 表中的数据移动到 PGsql 表。但我总是收到 MS 分布式事务协调器错误

消息 8522,级别 18,状态 1,第 1 行 Microsoft 分布式事务协调器 (MS DTC) 已停止此事务。

一个简单的插入 .. select 工作正常:

INSERT INTO [POSTGREsql].[MyPgDb].[MyPgSchema].[MyPgTable](Id,StartTime,EndTime,TestMessage)
(SELECT [Id],[StartTime],[EndTime],[TestMessage] FROM [MysqLDb].[dbo].[MysqLTable]);

这是我正在使用的触发器:

USE [MysqLDb]
GO
/****** Object:  Trigger [dbo].[TriggerInsertMsg]    Script Date: 02.07.2021 09:15:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TriggerInsertMsg]
    ON [MysqLDb].[dbo].[MysqLTable]
    AFTER INSERT
    AS
    BEGIN TRAN
    SET NOCOUNT ON
    -- SET XACT_ABORT ON??
        INSERT INTO [POSTGREsql].[MyPgDb].[MyPgSchema].[MyPgTable](Id,TestMessage)
        (SELECT [inserted].Id,[inserted].StartTime,[inserted].EndTime,[inserted].TestMessage FROM INSERTED)
    COMMIT;

我尝试了以下操作但没有成功:

  • 在触发器中使用 BEGIN TRAN.. COMMIT; 而不是 BEGIN..END
  • 启动 MSDTC 服务
  • 在防火墙中启用 MSDTC
  • 在 dcomcnfg 中启用 XA 事务
  • 使用 SET XACT_ABORT ON

当我用其他 sql 表替换链接的 pg 服务器时,触发器工作正常。我是否必须调整某些 Postgresql 配置以启用来自 sql 服务器和/或 MS DTC 的事务?在哪里可以找到错误的参考(Msg 8522,Level 18,State 1,Line 1)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)