Quien no se encontro alguna vez con la necesidad de traer algun dato desde un SQL Server a un Postgres…???

Bien, tenia esto:

Un postgres 9.6.5 y un SQL Server 2014 SP2 (12.0.5207.0) todo en 64bits. Y supongamos que tambien tienen un usaurio y clave del SQL Server, asi como el nombre de la tabla, en mi caso daf.

Enconces, empece:

En el Centos con Root (esto es la instalacion, no lo hagan si ya lo tienen):

    • yum install postgresql96-server
    • yum install freetds freetds-devel
    • yum install postgresql96-libs postgresql96-devel
    • firewall-cmd –permanent –add-port=5432/tcp
    • firewall-cmd –reload

En el Centos con Postgers (esto es la instalacion, no lo hagan si ya lo tienen):

    • /usr/pgsql-9.6/bin/initdb -E=UTF-8 -U postgres -A trust -W -D /bases_postgres/data
    • vi postgresql.conf
    • vi pg_hba.conf
    • /usr/pgsql-9.6/bin/pg_ctl -D /bases_postgres/data start

En el Centos con Root:

    • export TDS_FDW_VERSION=”1.0.8″
    • wget https://github.com/tds-fdw/tds_fdw/archive/v${TDS_FDW_VERSION}.tar.gz -O tds_fdw-${TDS_FDW_VERSION}.tar.gz
    • tar -xvzf tds_fdw-${TDS_FDW_VERSION}.tar.gz
    • cd tds_fdw-${TDS_FDW_VERSION}
    • PATH=/usr/pgsql-9.6/bin:$PATH make USE_PGXS=1
    • PATH=/usr/pgsql-9.6/bin:$PATH make USE_PGXS=1 install
    • ping sqlserver
    • telnet sqlserver 1433
    • tsql -S sqlserver -U fdw

En el PGADMIN con Postgres:

    • CREATE EXTENSION tds_fdw;
    • create server tds_testserver foreign data wrapper tds_fdw options (servername ‘sqlserver’, port ‘1433’, database ‘diego_test_fdw’, tds_version ‘4.2’, character_set ‘UTF-8’);
    • create user mapping for postgres server tds_testserver options (username ‘fdw’, password ‘daf’);
    • create foreign table daf (id integer, valor varchar(100) ) server tds_testserver options (table ‘daf’);
    • select * from daf;

Estos pasos se siguieron basados en la union de estas notas:
Noten que hay varios cambios

El cambio es muy simple, primero ingresamos al terminal toot linux y ejecutamos

su – postgres

Ya estamos como usuario postgres
Entramos al Postgresql ejecutando
psql template1 postgres

Ahora veamos cual es la codificación actual de las base de datos que tenemos un nuestro servidor digitando lo siguiente:

\l

Debe salir algo similar a lo siguiente:

template1=# \l
Listado de base de datos
Nombre | Dueño | Codificación
———–+———-+————–
PRUEBA | postgres | UTF8
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(4 filas)

Ahora vamos a cambiar el encoder a la Base de Datos PRUEBA, para lo cual vamos a digitar lo siguiente:

update pg_database set encoding=8 where datname='PRUEBA';

Ahora volvemos a listar las Base de Datos digitando: \l y debe aparecer algo similar a:

Listado de base de datos
Nombre | Dueño | Codificación
———–+———-+————–
PRUEBA | postgres | LATIN1
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(4 filas)

Con eso ya tenemos la Base de Datos en LATIN1, ahora, ustedes se preguntarán porque 8 en encoding? les pongo la tabla con el No. de encoding.

postrges

Para que coloquen el valor que les convengan ejemplo si quieren pasar a LATIN9 sería

update pg_database set encoding=16 where datname='PRUEBA';

Basado en la nota de http://ingdesistemasvzla.blogspot.com.ar/2011/02/cambiar-encoding-de-utf-8-latin1-en.html