问题描述
我正在尝试使用 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 (将#修改为@)