2017-04-27 91 views
0

我试图使MSSQL数据库与PostGIS之间同步。在MSSQL视图中有我需要的坐标,投影和其他数据。我试图插入到PostGIS视图中,并在视图的规则中创建几何和变换数据。从MSSQL插入到LINKED POSTGRES导致'pos_loadload_loadload失败'

我创建了所有需要的东西,但是从MSSQL(同为using insert into linked serverinsert into openquery)插入时,它抛出我下面的错误:

OLE DB provider "MSDASQL" for linked server "PG_SYNC_TEST" returned message "positioned_load in pos_newload failed".

Msg 7343, Level 16, State 2, Line 1 The OLE DB provider "MSDASQL" for linked server "PG_SYNC_TEST" could not INSERT INTO table "[MSDASQL]".

有谁知道发生了什么,什么是设置错了?

另外,MSSQL是2016和PostgreSQL 9.6。

UPDATE - 链接服务器定义

/****** Object: LinkedServer [PG_SYNC_TEST] Script Date: 4/28/2017 8:06:39 AM ******/ EXEC master.dbo.sp_addlinkedserver @server = N'PG_SYNC_TEST', @srvproduct=N'PostgreSQL', @provider=N'MSDASQL', @datasrc=N'pg_sync_test' /* For security reasons the linked server remote logins password is changed with ######## */ EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'PG_SYNC_TEST',@useself=N'False',@locallogin=NULL,@rmtuser=N'mssql_user',@rmtpassword='########'

GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'collation compatible', @optvalue=N'false' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'data access', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'dist', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'pub', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'rpc', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'rpc out', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'sub', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'connect timeout', @optvalue=N'0' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'collation name', @optvalue=null GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'lazy schema validation', @optvalue=N'false' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'query timeout', @optvalue=N'0' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'use remote collation', @optvalue=N'true' GO

EXEC master.dbo.sp_serveroption @server=N'PG_SYNC_TEST', @optname=N'remote proc transaction promotion', @optvalue=N'true' GO

数据源(ODBC 64) datasource (ODBC x64)

更新2 - 查询返回的错误:

INSERT INTO PG_SYNC_TEST.sync.[public].v_test_points 
(lat, lng, projection, elevation, geochem) 
SELECT lat, lng, projection, elevation, geochem 
FROM geochem 
+0

请证明链接服务器的完整查询和定义'exec sys.sp_linkedservers' –

+0

@MikhailLobanov请看看更新。 – Aleksandar

+0

你还可以发布返回错误的查询吗?它在哪个服务器上执行? –

回答

1

检查是否有触发器启用PG_SYNC_TEST.sync & [public].v_test_points - 如果是,请禁用并重试。