插入 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...