También puede utilizar la envoltura de datos extranjeros ogrfdw que se apoya en GDAL. Eso es lo que yo uso para mis necesidades de importación de SQL Server / a PostGIS.
https://github.com/pramsey/pgsql-ogr-fdw
Se instala como parte de los instaladores de Windows PostGIS stackbuilder.
Así es como me conecto a SQL Server. También se puede utilizar el controlador MSSQLSpatial, pero he encontrado que el uso de ODBC es más predecible si no tienes datos espaciales.
1) Si aún no lo ha hecho, instale la extensión ogr fdw en su base de datos PostgreSQL con -
CREAR EXTENSIÓN ogr_fdw;
2) CREAR un servidor extranjero:
2a) Si desea utilizar el tipo ODBC, registre un DSN de sistema para su base de datos SQL Server. En mi ejemplo lo llamaré MYSS. Ten en cuenta que MSSQLSpatial soporta conexiones sin DSN, por lo que esta parte no es necesaria si utilizas eso.
Suelo usar ODBC ya que la mayoría de mis datos de sql server no son espaciales y el MSSQlSPatial tiene un comportamiento peculiar de renombrar la clave primaria a fid. ODBC siempre añade otro fid que ignoro.
-- así es como se hace ODBC (puede ser sql server u oracle o lo que sea)
CREATE SERVER svr_myss
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (datasource 'ODBC:myuser/mypassword@MYSS',format 'ODBC');
-- así es como se hace MS SQL Spatial. Tenga en cuenta que, por defecto, el controlador de MSSPatial sólo listará las tablas con geometría (y creo que de tipo geográfico). Tienes que establecer una variable de entorno: MSSQLSPATIAL_LIST_ALL_TABLES=yes
para que liste todas las tablas.
Consulte esto para obtener más detalles: http://www.gdal.org/drv_mssqlspatial.html
-- sustituya localhost por el nombre del servidor sql si no está en el mismo servidor. El 1433 no es necesario, pero si usted está ejecutando en un puerto no estándar (que hago), entonces usted tendría que especificar el puerto.
CREATE SERVER svr_myss
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (datasource 'MSSQL:server=localhost,1433;database=mygisdb;user=myuser;password=mypassword',format 'MSSQLSpatial');
También puedes hacer trust y demás, pero eso sólo funciona si tienes postgresql corriendo bajo una cuenta de windows que tenga derechos sobre la base de datos.
4) CREAR un esquema para albergar sus tablas externas:
CREAR SCHEMA myss;
5) Ahora puedo enlazar todas las tablas de mi esquema dbo. así:
IMPORTAR ESQUEMA FOREIGN "dbo." FROM SERVER svr_myss INTO myss;
6) Debería ver todas las tablas listadas como tablas foráneas y entonces puede consultarlas como cualquier otra tabla en PostgreSQL e incluso unirlas con tablas de PostgreSQL a su gusto. Genial.
Una advertencia es que si tienes un montón de tablas, como más de 200 en tu base de datos de SQL Server, es posible que quieras especificarlas como parte de tu CREATE SERVER. GDAL ODBC es un poco tonto en la consulta de tablas, y especificar las tablas de antemano evita que intente siempre consultar todo el catálogo en cada consulta, por lo que sus consultas contra las tablas extranjeras serán mucho más rápidas.
Para ello, debes configurar tu CREATE SERVER de la siguiente manera:
CREATE SERVER svr_myss
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (datasource 'ODBC:myuser/mypassword@MYSS,dbo.User,dbo.AnotherTable',
format 'ODBC');
7) Para copiar los datos hago una inserción masiva como
SELECT * INTO myss.orders FROM myss.dbo_orders;
Alternativamente, puede envolver su tabla extranjera en una vista materializada y configurar un horario para refrescar su vista materializada con pgagent por ejemplo.
CREATE MATERIALIZED VIEW myss.vw_orders
0 votos
GeoKettle es la alternativa de código abierto spatialytics.org/projects/geokettle (compatible con Postgres y SQL Server 2008.
0 votos
Que yo sepa, no existe ninguna herramienta gratuita de este tipo. Lo más parecido en cuanto a herramientas de "clic de botón" es FME workbench.
0 votos
Gracias @Mapperz. De momento esta parece mi mejor opción, aunque parece que puede ser más de lo que necesito. Como he comentado más abajo, básicamente estoy buscando una simple importación de una tabla SQL en PostgreSQL, pero que incluya la columna de geometría.