У меня есть экземпляр SQL Server 2014
, работающий на сервере Windows 2008R2
. У меня также есть Postgres 11
на этом сервере. Я использовал Stack Builder для установки psqlODBC (64bit) v10.02.0000-1 и настроил связанный сервер SQL Server для драйвера Postgres ODBC.
Затем я запускаю следующее, чтобы вставить данные из базы данных SQL Server в таблицу с таким же макетом в базе данных Postgres.
insert openquery([LS_PG_RAMM], 'select * from public.vehpos')
select *
from VEHPOS where idvehpos > 0 and idvehpos < 60000
order by idvehpos
Передача данных завершается, как и ожидалось, при условии, что я выбираю менее 70 000 записей одновременно. Если я превышаю это количество, я получаю следующее сообщение:
Msg 109, Level 20, State 0, Line 6
A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 0 - The pipe has been ended.)
И экземпляр (служба) SQL Server умирает и должен быть перезапущен . После этого я могу запустить следующую партию из 70 000 записей или меньше.
Я много гуглил, и многие сталкивались с этой проблемой, особенно с MySQL и Oracle. Я применил все советы, которые мог найти, включая, но не ограничиваясь:
EXEC sp_configure 'remote query timeout', 0;
RECONFIGURE WITH OVERRIDE;
GO
Но проблема все еще возникает. Учитывая, что у меня есть 800 миллионов записей для передачи в Postgres, это будет очень утомительно, пока я не исправлю проблему.