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 pgAdmin III, tiene sucesor, un completamente nuevo pgAdmin 4 que por desgracia esta muuuuuuuuy verde.
Lo pueden encontrar en su sitio: pgadmin.org

Pros:

  • Soporta v9.6
  • Una vez conectado el arbol carga rapido.

Contras:

  • No tiene buscar (ctrl+F), reemplazar, nuevo (ctrl+N; (ctrl+E))
  • No podes importar los servidores registrados en el PGAdmin 3
  • No podes cambiar de solapa con ctrl+tab
  • Tarda en arrancar

SELECT unnest(string_to_array(‘1,2,3,4’, ‘,’))

un string lo transformas a un array y el unnest te lo pone en filitas… bien tecnico

Saludos,

CREATE FUNCTION get_sa() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE VIEW pg_stat_activity_allusers AS SELECT * FROM get_sa();

GRANT SELECT ON pg_stat_activity_allusers TO public;

select * from pg_stat_activity_allusers;

n buen resumen de muchisimas funciones de strings, conocidas y desconocidas:
Todo en un PDF:
Por ejemplo, cómo parsear un string separado por comas:
SPLIT_PART ('1,2,3', ',', 2) = '2'
cómo rellenar con ceros:
LPAD ('123', 6, '0') = '000123'
cómo escribir con iniciales mayusculas:
INITCAP ('hi thomas') = 'Hi Thomas'
etc, etc etc.

Ayer Leo necesitaba corregir un sp de XXXX en Produccion.
Me pidio por mantis corregirlo una vez, lo ejecutó y tuvo otro error.

Me pidio por mantis corregirlo otra vez, lo ejecutó y tuvo otro error.
A la tercera me pide permiso para alterar el sp.
Puse el sp como propiedad ya no del usuario “POSTGRES” sino del GRUPO “grupo_escritura”. No es un usuario, es un grupo.
y listo! Lo sigue pudiendo usar el soft, lo puede esitar él y cualquiera con permiso de escritura, sin necesidad de subirle los permisos a nadie.
A favor: Permite tocar sp’s sin ser owner.
En contra: Que cualquiera con permiso escritura de datos toque sp’s (funciones)

Recién tuve que hacer un insert masivo de registros borrados por error (desde Chaco) sobre una tabla de Prevencion PROD que tiene TRIGGGERS.
Tomé los registros de un backup y los inserté pero NO QUIERO QUE SE DISPARE EL TRIGGER yaa que los registros “siempre estuvieron alli y no cambiaron”.
Deshabilitar el trigger de la tabla afecta a todas las sesiones de produccion que la estan usando… respuesta?
SET session_replication_role = replica;

This disables triggers for the current session.

To re-enable for the same session:

SET session_replication_role = DEFAULT;
et voilá!
Es como si “por un rato” mi conexion (y no todas las demas) se comportan como si fuera la conexion de un agente de réplica donde no se disparan triggers al sincronizar bases.