Witam,
Zapytanie jest takie (dość prostem, chciaż w praktyce będzie ich więcej):
BEGIN TRAN TranTest
BEGIN TRY
INSERT INTO [PostgreSQL2].[postgres].[synctest].[measurements]
([idmeasurement]
,[idmeasuringpoint]
,[measuringtype]
,[idstatus]
,[date]
,[value]
,[unit])
VALUES
(543
,'asdasd'
,'ioiosiads'
,543
,'2010-10-01'
,15
,'m3')
END TRY
BEGIN CATCH
ROLLBACK TRAN TranTest
PRINT 'Błąd'
RETURN
END CATCH
COMMIT TRAN TranTest
Odpowiedź:
//
OLE DB provider "PGNP" for linked server "PostgreSQL2" returned message "MSDTC XARMCreate error".
Msg 7391, Level 16, State 2, Line 31
The operation could not be performed because OLE DB provider "PGNP" for linked server "PostgreSQL2" was unable to begin a distributed transaction.
//
Próbowałem jeszcze tak, ale w sumie na jedno wychodzi i efekt ten sam:
BEGIN TRAN
INSERT INTO [PostgreSQL2].[postgres].[synctest].[measurements]
([idmeasurement]
,[idmeasuringpoint]
,[measuringtype]
,[idstatus]
,[date]
,[value]
,[unit])
VALUES
(543
,'asdasd'
,'ioiosiads'
,543
,'2010-10-01'
,15
,'m3')
if @@Error > 0
ROLLBACK
else
COMMIT TRAN
Macie jakiś pomysł? Niestety, na forum prowidera PGNP (http://www.pgoledb.com/forum/index.php) nie zapytam, bo wyłączyli rejestrację, komunikat błędu raczej wiele nie mówi, szukanie na google też nie dało rezultatów. Zaznaczam, że:
- takie samo zapytanie bez użycia transakcji działa tak jak trzeba
- użycie transakcji przy insertach do tabel w bazie MSSQL też działa więc nie jest to raczej problem z samym MSDTC, a z providerem do PostgreSQL
Myślałem jeszcze, żeby użyć providera ODBC do PostgreSQL, ale tu też porażka - w ogóle nie działa na nim linked server. Mógłbym olać transacje, ale z pewnych względów nie chcę tego robić.
Pomoże ktoś?