Re: Seleccionar columnas por su posicion en lugar de su nombre

2018-08-23 Thread Gerardo Herzig - Redes FMED


- Mensaje original -
> De: "jvenegasperu" 
> Para: "Postgresql" 
> Enviados: Jueves, 23 de Agosto 2018 11:32:10
> Asunto: Seleccionar columnas por su posicion en lugar de su nombre

> buen dia tengo esta situacion
> 
> como resultado de hacer una consulta cruzada obtengo datos como se ve en la
> imagen adjunta
> 
> donde las fechas eran filas y han pasado a ser columnas.
> 
> ahora el tema es que las fechas siempre van a ser variables mes a mes mi
> pregunta es si existe forma de seleccionar las columnas por su posicion en
> lugar de su nombre algo como cambiar
> 
> select nombre1,nombre2 from tabla;
> 
> por algo quiza como
> 
> select columnid(1), columnid(2) from tabla/vista;
> 
> como podria lograr algo asi seleccionar por la posicion de la columan en
> lugar de su nombre es que no se como se llamara la columna por que es el
> resultado de la columna cruzada

Creo que vas a tener que construirla en pl/pgsql (u otro lenguage, pl/python o 
lo que domines).

Los nombres de los campos podes sacarlos de information_schema.columns:
postgres=# \d test
Table "public.test"
 Column |  Type   | Collation | Nullable | Default  
+-+---+--+--
 id | integer |   | not null | nextval('test_id_seq'::regclass)
 data   | text|   |  | 

postgres=# select column_name from information_schema.columns where table_name 
= 'test' and ordinal_position=2;
 column_name 
-
 data
(1 row)

y una vez que tenes los nombres de la/s columnas segun posicion, te armas un 
string y le mandas un 
EXECUTE '.'

HTH
Gerardo

Re: Acerca de módulo contrib a instalar en Postgres

2018-08-20 Thread Gerardo Herzig - Redes FMED



- Mensaje original -
> De: "Yessica Brinkmann" 
> Para: "Alvaro Herrera" 
> CC: "Daymel Bonne" , "Juan" 
> , "pgsql-es-ayuda"
> 
> Enviados: Domingo, 19 de Agosto 2018 22:26:58
> Asunto: Re: Acerca de módulo contrib a instalar en Postgres

> Buenas,
> Les cuento que estuve esperando a que me instalaran Internet en la máquina
> donde trabajo en este proyecto para poder trabajar mejor.
> Y anoche empecé de nuevo a trabajar en el proyecto.
> Instalé de nuevo incluso Debian.
> Empecé todo de nuevo.
> Luego instalé el Postgresql 8.3.23.
> Pero antes de instalar el Index Adviser, intenté nomás ya levantar el
> servidor Postgresql, ya que ese era el último problema que estaba teniendo.
> Al intentar levantar el servidor Postgresql me aparece ahora el siguiente
> error:
> root@debian:/home/yessica/postgresql-8.3.23/src/bin/initdb# ./initdb -D
> /usr/local/etc/yessi2
> The program "postgres" is needed by initdb but was not found in the
> same directory as "/home/yessica/postgresql-8.3.23/src/bin/initdb/initdb".

Te conviene usar la version compilada de initdb. Por default, deberia estar en 
el directorio /usr/local/pgsql/bin/, pero depende de las opciones de configure 
que hayas utilizado.

HTH
Gerardo



Re: Generar registros no existentes en tablas

2018-04-25 Thread Gerardo Herzig


- Mensaje original -
> De: "Wilmer Garcia" 
> Para: pgsql-es-ay...@postgresql.org
> Enviados: Miércoles, 25 de Abril 2018 16:48:54
> Asunto: Generar registros no existentes en tablas
> 
> Saludos desde Venezuela, acudo a ustedes para solicitar su orientación
> respecto a un requerimiento que no he podido resolver.
> 
> Se necesita generar un reporte de nomina donde se refleje el ingreso total
> mensual de un trabajador en los últimos 6 años.
> 
> Siempre se deben generar 6 columnas (los seis años) y 12 registros que
> corresponden a los 12 meses.
> 
> En el caso que un trabajador solo trabajó 5 meses, igual se debe rellenar
> las 6 columnas (años) por cada 12 registros (meses) y donde no se obtenga
> datos, se rellena con valor cero (0).
> 
> En la base de datos donde se extrae la información no existe una tabla
> donde esté definido un calendario.
> 
> El problema que no he logrado resolver, es cómo generar los doce registros
> para los casos en que una persona trabajó menos de un año.
> 
> Un intento fue utilizar un generate_series(1,12) como parte del FROM pero
> no encuentro como vincularlo a la tabla donde esta la referencia a las
> fechas de los registros de cobro del trabajador.
> 
> Creo que se puede resolver con plpgsql pero quiero saber sin con SQL hay
> solución antes de indagar a otro nivel.
> 
> Se utiliza PostgreSQL 9.1 sobre Debian 8
> 
> Espero haber logrado hacerme entender, agradecido de antemano por su
> atención.
> 
> --
> *WILMER GARCIA*
> 

Para esta clase de casos, generalmente se recurre a crosstab para generar lo 
que llaman un "pivot":
https://www.postgresql.org/docs/current/static/tablefunc.html


HTH
Gerardo



Re: recovery_min_apply_delay y WAL

2018-04-11 Thread Gerardo Herzig
El 11 de abril de 2018, 15:09, Hellmuth Vargas <hiv...@gmail.com> escribió:

> Hola Geraldo
>
> Gracias por la respuesta, pero si para ponerla al día se necesita los WAL
> archivados entonces no seria el escenario 1, precisamente lo que quieres
> saber es si la replica retrasada va guardando los WAL que genera la master
> y esta los  va aplicando a medida que van cumpliendo el criterio del delay,
> por lo tanto si uno la promueve a master esta se pondría a dia pues tendría
> todos los WAL necesarios  para eso.
>
>
> El 11 de abril de 2018, 11:20, Gerardo Herzig<gerardo.her...@ayres.io>
> escribió:
>
>>
>>
>> El 11 de abril de 2018, 12:21, Hellmuth Vargas <hiv...@gmail.com>
>> escribió:
>>
>>> Hola Lista
>>>
>>> Tengo configurado un Cluster PostgreSQL 9.6 con dos Replicas
>>> asincronicas una de ellas con el parámetro recovery_min_apply_delay
>>> (recovery.conf) en  300min, lo que significa que esta replica esta
>>> retrasada 5 horas con respecto a la master, pero tengo una duda con
>>> respecto al comportamiento de los archivos WAL:
>>>
>>> 1. La replica 'retrasada' solicita y mantiene los WAL que va generando
>>> la master y va aplicando  estos WAL en la replica?  ó
>>>
>>> 2. La replica va solicitando los WAL de hace 5 horas las master y los va
>>> aplicando?
>>>
>>> Porque la duda, si la master y la otra replica se dañaran y la replica
>>> retrasada se comportara como el caso 1, pues podría promoverla a master y
>>> esta se debería poner 'al día'  con las transacciones que alcanzo a generar
>>> la master. Pero si se comporta como el escenario 2, pues tendría solo una
>>> copia de hace 5 horas antes del incidente.
>>>
>>> Muchas Gracias Lista
>>>
>>>
>>>
>>>
>>> --
>>> Cordialmente, ta
>>>
>>> Ing. Hellmuth I. Vargas S.
>>>
>>
>>
>> El delay se da en el "apply", o sea, la respuesta es "numero 1". Me
>> parece, de todos modos, que para "ponerla al dia" lo habitual es hacer
>> archiving, lo cual te serviria para cualquiera de las replicas.
>>
>> HTH
>> Gerardo
>> --
>> --
>> Gerardo Herzig
>> Principal Consultant at Ayres Data Team
>> root at Via Postgres Argentina
>>
>
>
>
> --
> Cordialmente,
>
> Ing. Hellmuth I. Vargas S.
> Esp. Telemática y Negocios por Internet
> Oracle Database 10g Administrator Certified Associate
> EnterpriseDB Certified PostgreSQL 9.3 Associate
>
>

Entiendo, por eso intente aclarar que lo del archiving es una repuesta para
el caso mas general, de poner al dia cualquier replica.

Saludos
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: recovery_min_apply_delay y WAL

2018-04-11 Thread Gerardo Herzig
El 11 de abril de 2018, 12:21, Hellmuth Vargas <hiv...@gmail.com> escribió:

> Hola Lista
>
> Tengo configurado un Cluster PostgreSQL 9.6 con dos Replicas asincronicas
> una de ellas con el parámetro recovery_min_apply_delay (recovery.conf)
> en  300min, lo que significa que esta replica esta retrasada 5 horas con
> respecto a la master, pero tengo una duda con respecto al comportamiento de
> los archivos WAL:
>
> 1. La replica 'retrasada' solicita y mantiene los WAL que va generando la
> master y va aplicando  estos WAL en la replica?  ó
>
> 2. La replica va solicitando los WAL de hace 5 horas las master y los va
> aplicando?
>
> Porque la duda, si la master y la otra replica se dañaran y la replica
> retrasada se comportara como el caso 1, pues podría promoverla a master y
> esta se debería poner 'al día'  con las transacciones que alcanzo a generar
> la master. Pero si se comporta como el escenario 2, pues tendría solo una
> copia de hace 5 horas antes del incidente.
>
> Muchas Gracias Lista
>
>
>
>
> --
> Cordialmente, ta
>
> Ing. Hellmuth I. Vargas S.
>


El delay se da en el "apply", o sea, la respuesta es "numero 1". Me parece,
de todos modos, que para "ponerla al dia" lo habitual es hacer archiving,
lo cual te serviria para cualquiera de las replicas.

HTH
Gerardo
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: Crear Una trigger usando ROW_NUMBER

2018-02-21 Thread Gerardo Herzig
El 21 de febrero de 2018, 11:25, yeli <yeliar...@gmail.com> escribió:

> Buen día, estoy intento crear un código único concatenado tomando datos de
> la función ROW_NUMBER debería hacer lo siguiente:
>
> Tengo una base de datos postgresql que contiene datos geográficos para ser
> visualizados en un software GIS.
>
> Básicamente es una tabla donde se guardan datos sobre centros poblados,
> estos centros poblados tienen datos que al concatenarlos se intenta crear
> códigos únicos.
>
> id(serial)
>
> Ccentpob
>
> (Primary Key)
>
> Nombre
>
> (Character)
>
> cod_cent
>
> (Fk_Key)
>
> sim_cent
>
> (Fk_Key)
>
> row_number
>
> (Integer)
>
> 1
>
>
> La Guaira
>
> 24
>
> VAR
>
>
> 2
>
>
> Maiquetía
>
> 24
>
> VAR
>
>
> 3
>
>
> Cabudare
>
> 13
>
> LAR
>
>
> 4
>
>
> Barquisimeto
>
> 13
>
> LAR
>
>
> 5
>
>
> Maracay
>
> 05
>
> ARA
>
>
> 6
>
>
> Palo Negro
>
> 05
>
> ARA
>
>
>
>
> Utilizando una consulta con la función ROW_NUMBER, logro numerar de cada
> Centro Poblado en función a la entidad federal que pertenecen:
>
> SELECT Id,ccentpob,nombre,cod_cent,sim_cent, ROW_NUMBER ( ) OVER
> (PARTITION BY cent)
>
> la cual me permite, llevar una secuencia de los datos en función a sus
> diferentes entidades federales centros poblados. Por lo que esta consulta
> queda así:
>
>
> id(serial)
>
> Ccentpob
>
> (Primary Key)
>
> Nombre
>
> (Character)
>
> cod_cent
>
> (Fk_Key)
>
> sim_cent
>
> (Fk_Key)
>
> row_number
>
> (Integer)
>
> 1
>
>
> La Guaira
>
> 24
>
> VAR
>
> 1
>
> 2
>
>
> Maiquetía
>
> 24
>
> VAR
>
> 2
>
> 3
>
>
> Cabudare
>
> 13
>
> LAR
>
> 1
>
> 4
>
>
> Barquisimeto
>
> 13
>
> LAR
>
> 2
>
> 5
>
>
> Los Crepusculos
>
> 13
>
> LAR
>
> 3
>
> 6
>
>
> Palo Negro
>
> 05
>
> ARA
>
> 1
>
>
>
> Hasta aquí todo funciona perfecto. Al probar esto como una consulta
> intento ponerlo en un función que permita utilizar un trigger, que se va a
> activar cada que que al insertar un dato desde el SIG, se enumere el dato
> siguiendo la secuencia. Lo que me va a permita concatenar los datos para
> crear el ccentpob que es el único dato que me falta.
>
> La función que utilizo es la siguiente:
>
>
> CREATE TRIGGER row_number BEFORE INSERT
>
> ON nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados
>
> FOR EACH ROW EXECUTE PROCEDURE nombres_geograficos.row_number();
>
>
> CREATE OR REPLACE FUNCTION nombres_geograficos.row_number() RETURNS
> TRIGGER AS '
>
> DECLARE
>
> row_number numeric;
>
> BEGIN
>
> IF NEW.cent IS NOT NULL THEN
>
> row_number := (SELECT ROW_NUMBER ( ) OVER (PARTITION BY cent)
>
> FROM nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados);
>
> END IF;
>
> RETURN NEW;
>
> END'
>
> language PLPGSQL;
>
>
> Compilo todo y no me da error, pero cuando intento usar el Qgis 2.18 me da
> un error… y no me almacena el dato. Dice que el dato no esta almacenado,
> estoy consiente que el ROW_NUMBER es un dato temporal, sea parte de la
> tabla para así poder ejecutar mi trigger con éxito.
>
> Alguien tiene alguna sugerencia.
>
> Se lo agradecería de verdad.
>
>
>
>
>
>

Si entendi bien, en el trigger necesitas asignar new.row_number a algo:

IF NEW.cent IS NOT NULL THEN

row_number := (SELECT ROW_NUMBER ( ) OVER (PARTITION BY cent)

FROM nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados);

new.row_number = row_number;

END IF;



O algo asi..usar row_number como variable, nombre de campo, y siendo
que es ya una funcion en postgres, resulta bastante confuso y no creo que
se la mejor idea usarlo asi.

HTH
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: Feliz navidad y una consulta.

2017-12-25 Thread Gerardo Herzig
El 24 de diciembre de 2017, 17:53, Gonzalo V <gvm2...@gmail.com> escribió:

> Ya lo arreglé. habia que arreglar FOR EACH ROW
>
> CREATE TRIGGER vencimientos_trigger AFTER INSERT OR UPDATE ON
> "Facturacion_registro" *for each row* EXECUTE PROCEDURE
> actualiza_fact_registro_trigger();
>
> saludos y feliz navidad!!
>
> Saludos,
> Gonzalo
>
> El 24 de diciembre de 2017, 17:15, Gerardo Herzig <gerardo.her...@ayres.io
> > escribió:
>
>>
>>
>> El 24 de diciembre de 2017, 17:06, Gonzalo V <gvm2...@gmail.com>
>> escribió:
>>
>>> Hola gerardo, gracias por responder. Imprime el siguiente error
>>> ERROR:  record "new" is not assigned yet
>>> DETAIL:  The tuple structure of a not-yet-assigned record is
>>> indeterminate.
>>> CONTEXT:  SQL statement "Update "Facturacion_registro" f set
>>> "Cod_sucursal"=(select s."ID" from sucursales s where
>>>
>>> s."DIRECCION"=NEW."Dirección")
>>> from sucursales s
>>>     where
>>> s."DIRECCION"=NEW."Dirección" and f."Cod_sucursal" is null"
>>> PL/pgSQL function actualiza_fact_registro_trigger() line 3 at SQL
>>> statement
>>> SQL state: 55000
>>>
>>> Saludos,
>>> Gonzalo
>>>
>>> El 24 de diciembre de 2017, 16:44, Gerardo Herzig <
>>> gerardo.her...@ayres.io> escribió:
>>>
>>>>
>>>>
>>>> 2017-12-24 15:10 GMT-03:00 Gonzalo V <gvm2...@gmail.com>:
>>>>
>>>>> Feliz navidad a todos!
>>>>> Tengo una duda, si me pueden ayudar en esta navidad...
>>>>> Necesito crear una funcion trigger que updatee unos datos a partir de
>>>>> otras tablas pero no me funciona, alguien sale como se hace?. Lo que llevo
>>>>> hecho, no me funciona.
>>>>> De antemano, muchas gracias y feliz navidad y año nuevo.
>>>>>
>>>>>
>>>>> CREATE OR REPLACE FUNCTION actualiza_fact_registro_trigger() RETURNS
>>>>> TRIGGER AS $$
>>>>> BEGIN
>>>>> Update "Facturacion_registro" f set "Cod_sucursal"=(select s."ID" from
>>>>> sucursales s where
>>>>>
>>>>> s."DIRECCION"=f."Dirección")
>>>>> from sucursales s
>>>>> where
>>>>> s."RUT"=f."Rut" and s."DIRECCION"=f."Dirección" and f."Cod_sucursal" is
>>>>> null;
>>>>> RETURN new;
>>>>> END
>>>>> $$
>>>>> LANGUAGE 'plpgsql';
>>>>>
>>>>> CREATE TRIGGER vencimientos_trigger AFTER INSERT OR UPDATE ON
>>>>> "Facturacion_registro" EXECUTE PROCEDURE actualiza_fact_registro_trigge
>>>>> r();
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Saludos,
>>>>> Gonzalo
>>>>>
>>>>
>>>>
>>>> No queda claro que es lo que "no funciona". Si no me equivoco, la
>>>> funcion del trigger no usa para nada los valores del registro que se esta
>>>> insertando, por lo que, para empezar, proba directamente ese SQL de la
>>>> funcion, tiralo via 'psql' como un query comun y corriente. Tal vez sucede
>>>> que los WHERE de tu query no satisfacen ningun registro, pero de nuevo, no
>>>> se entiende cual es el problema.
>>>>
>>>> HTH
>>>> --
>>>> --
>>>> Gerardo Herzig
>>>> Principal Consultant at Ayres Data Team
>>>> root at Via Postgres Argentina
>>>>
>>>
>>>
>> Ah pero ahi SI estas usando NEW. No es el mismo codigo del OP.
>> Si vos queres actualizar el registro que se esta insertando, podes
>> asignar directamente a NEW: Algo como...
>>
>> new."Cod_sucursal" = select s."ID" from sucursales s where
>> s."DIRECCION"=NEW."Dirección"
>>
>> HTH
>> --
>> --
>> Gerardo Herzig
>> Principal Consultant at Ayres Data Team
>> root at Via Postgres Argentina
>>
>
Gonzalo, para la proxima:
1) Intenta no hacer top-posting, ya que hace mucho mas complicado de seguir
el thread
2) Si posteas alguna clase de problema o error, evita el "no me anda",
postea cual es *exactamente* el error que te da, asi vamos mas directo a la
fuente del problema.

Saludos
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: Feliz navidad y una consulta.

2017-12-24 Thread Gerardo Herzig
El 24 de diciembre de 2017, 17:06, Gonzalo V <gvm2...@gmail.com> escribió:

> Hola gerardo, gracias por responder. Imprime el siguiente error
> ERROR:  record "new" is not assigned yet
> DETAIL:  The tuple structure of a not-yet-assigned record is indeterminate.
> CONTEXT:  SQL statement "Update "Facturacion_registro" f set
> "Cod_sucursal"=(select s."ID" from sucursales s where
>
> s."DIRECCION"=NEW."Dirección")
> from sucursales s
> where
> s."DIRECCION"=NEW."Dirección" and f."Cod_sucursal" is null"
> PL/pgSQL function actualiza_fact_registro_trigger() line 3 at SQL
> statement
> SQL state: 55000
>
> Saludos,
> Gonzalo
>
> El 24 de diciembre de 2017, 16:44, Gerardo Herzig <gerardo.her...@ayres.io
> > escribió:
>
>>
>>
>> 2017-12-24 15:10 GMT-03:00 Gonzalo V <gvm2...@gmail.com>:
>>
>>> Feliz navidad a todos!
>>> Tengo una duda, si me pueden ayudar en esta navidad...
>>> Necesito crear una funcion trigger que updatee unos datos a partir de
>>> otras tablas pero no me funciona, alguien sale como se hace?. Lo que llevo
>>> hecho, no me funciona.
>>> De antemano, muchas gracias y feliz navidad y año nuevo.
>>>
>>>
>>> CREATE OR REPLACE FUNCTION actualiza_fact_registro_trigger() RETURNS
>>> TRIGGER AS $$
>>> BEGIN
>>> Update "Facturacion_registro" f set "Cod_sucursal"=(select s."ID" from
>>> sucursales s where
>>>
>>> s."DIRECCION"=f."Dirección")
>>> from sucursales s
>>> where
>>> s."RUT"=f."Rut" and s."DIRECCION"=f."Dirección" and f."Cod_sucursal" is
>>> null;
>>> RETURN new;
>>> END
>>> $$
>>> LANGUAGE 'plpgsql';
>>>
>>> CREATE TRIGGER vencimientos_trigger AFTER INSERT OR UPDATE ON
>>> "Facturacion_registro" EXECUTE PROCEDURE actualiza_fact_registro_trigge
>>> r();
>>>
>>>
>>>
>>>
>>> Saludos,
>>> Gonzalo
>>>
>>
>>
>> No queda claro que es lo que "no funciona". Si no me equivoco, la funcion
>> del trigger no usa para nada los valores del registro que se esta
>> insertando, por lo que, para empezar, proba directamente ese SQL de la
>> funcion, tiralo via 'psql' como un query comun y corriente. Tal vez sucede
>> que los WHERE de tu query no satisfacen ningun registro, pero de nuevo, no
>> se entiende cual es el problema.
>>
>> HTH
>> --
>> --
>> Gerardo Herzig
>> Principal Consultant at Ayres Data Team
>> root at Via Postgres Argentina
>>
>
>
Ah pero ahi SI estas usando NEW. No es el mismo codigo del OP.
Si vos queres actualizar el registro que se esta insertando, podes asignar
directamente a NEW: Algo como...

new."Cod_sucursal" = select s."ID" from sucursales s where
s."DIRECCION"=NEW."Dirección"

HTH
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: Feliz navidad y una consulta.

2017-12-24 Thread Gerardo Herzig
2017-12-24 15:10 GMT-03:00 Gonzalo V <gvm2...@gmail.com>:

> Feliz navidad a todos!
> Tengo una duda, si me pueden ayudar en esta navidad...
> Necesito crear una funcion trigger que updatee unos datos a partir de
> otras tablas pero no me funciona, alguien sale como se hace?. Lo que llevo
> hecho, no me funciona.
> De antemano, muchas gracias y feliz navidad y año nuevo.
>
>
> CREATE OR REPLACE FUNCTION actualiza_fact_registro_trigger() RETURNS
> TRIGGER AS $$
> BEGIN
> Update "Facturacion_registro" f set "Cod_sucursal"=(select s."ID" from
> sucursales s where
>
> s."DIRECCION"=f."Dirección")
> from sucursales s
> where s."RUT"=f."Rut"
> and s."DIRECCION"=f."Dirección" and f."Cod_sucursal" is null;
> RETURN new;
> END
> $$
> LANGUAGE 'plpgsql';
>
> CREATE TRIGGER vencimientos_trigger AFTER INSERT OR UPDATE ON
> "Facturacion_registro" EXECUTE PROCEDURE actualiza_fact_registro_
> trigger();
>
>
>
>
> Saludos,
> Gonzalo
>


No queda claro que es lo que "no funciona". Si no me equivoco, la funcion
del trigger no usa para nada los valores del registro que se esta
insertando, por lo que, para empezar, proba directamente ese SQL de la
funcion, tiralo via 'psql' como un query comun y corriente. Tal vez sucede
que los WHERE de tu query no satisfacen ningun registro, pero de nuevo, no
se entiende cual es el problema.

HTH
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: Hola

2017-12-07 Thread Gerardo Herzig
; VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci,
> NEW.ultimav, NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active,
> NEW.imagen)»
> función PL/pgSQL security.rol_insert() en la línea 43 en sentencia SQL
>
>
> espero puedan ayudarme...
> muchas gracias de antemano....
>
> --
> ”La vida no es solo esperar a que pase la tormenta, sino aprender a bailar
> en la lluvia.”
>
> Evento Universidad 2018. Conozca todos los detalles en
> http://universidad2018.uij.edu.cu
>
>
Lo que se me ocurre mas probable es que tengas alguna llamada recurrente /
circular, probablemente en un trigger o regla
en la tabla "users".

HTH
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina


Re: CONSULTA

2017-10-18 Thread Gerardo Herzig
El 18 de octubre de 2017, 18:41, Maria Antonieta Ramirez <
marami...@ulsaneza.edu.mx> escribió:

>
> hola a todos !
>
>
> Ojala me puedan orientar, la idea es la siguiente:
>
>
> Cuando yo modifique una tabla , esta modificación se haga tambien en otra
> base de datos la cual esta en el mismo segmento de red pero en diferente
> servidor, no son bases iguales solo compartirian esa unica tabla ..
>
> alguna idea de como hacerlo?
>
>
> Sin mas por el momento quedo al pendiente de sus comentarios.
>
>
Si ambas tablas tienen la misma estructura, suena a un caso de replicacion
selectiva.
Dependiendo de la version de postgres:
En postgres 10 replicacion logica es nativa:
https://www.postgresql.org/docs/10/static/logical-replication.html

para 9.6, 9.5, 9.4, tenes un modulo externo:
https://github.com/2ndQuadrant/pglogical

Para versiones anteriores, podes usar slony, o hacerlo mas artesanal via
dblink o similar.

Saludos,
Gerardo


Re: duda con JSONB

2017-10-09 Thread Gerardo Herzig


- Mensaje original -
> De: "Carlos T. Groero Carmona" 
> Para: "Lista PostgreSql" 
> Enviados: Lunes, 9 de Octubre 2017 10:43:18
> Asunto: duda con JSONB
> 
> Hola LIsta,
> 
> Revisando algunas funciones de JSONB, me encuentro con este problemita y
> despues de revisar e intentar varias cosas no he dado con la solución...
> 
> Tengo una tabla:
> CREATE TABLE json_test.tablajsonb
> (
>   atributo jsonb
> ) ;
> 
> Estoy probando la función: jsonb_each
> 
> Viendo el ejemplo de postgresql.org
> select * from jsonb_each('{"a":"foo", "b":"bar"}')
> Obtienes:
> 
>  key | value
> -+---
>  a   | foo
>  b   | bar
> 
> Mi query:
>  SELECT jsonb_each(consulta.atributo) as result
> FROM (select t.atributo from json_test.tablajsonb t limit 2 ) consulta;
> Me devuelve lo siguiente:
> "(edad,11)"
> "(porciento,4.49)"
> "(nombre_apellidos,"""Nombre55 Apellido17""")"
> "(edad,35)"
> "(porciento,5.55)"
> "(nombre_apellidos,"""Nombre72 Apellido75""")"
> 
> donde edad, porciento y nombre_apellidos son los key de mi JSONB.
> 

Es que jsonb_each devuelve un tipo compuesto, tendrias que poner algo asi:

SELECT (jsonb_each(consulta.atributo)).* as result
 FROM (select t.atributo from json_test.tablajsonb t limit 2 ) consulta;


HTH
Gerardo



Re: dudas en replicacion

2017-10-06 Thread Gerardo Herzig


- Mensaje original -
> De: "Juan" 
> Para: "Ayuda" 
> Enviados: Viernes, 6 de Octubre 2017 18:13:29
> Asunto: dudas en replicacion
> 
> Gente
> 
> 
> Tengo que poner un remoto a replicar el master ambos postgres 64 bits
> pero difieren la version
> 
> resultado de select version();
> 
> master:
> 
>  PostgreSQL 9.1.9 on x86_64-unknown-linux-gnu, compiled by gcc (Debian
> 4.7.2-5) 4.7.2, 64-bit
> 
> 
> slave:
> 
>  PostgreSQL 9.2.23 on x86_64-redhat-linux-gnu, compiled by gcc (GCC)
> 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit
> 
> 
> esto genera algun problema??. alguna experiancia?
> 
> saludos
> 
>   Juan
> e
>

Para usar replicacion por streamin, deben ser las mismas versiones de PG.

Gerardo



Re: Registros desaparecidos de la BD

2017-10-03 Thread Gerardo Herzig

- Mensaje original -
> De: "Fernando A" 
> Para: "Alvaro Herrera" 
> CC: "Lista PostgreSQL" 
> Enviados: Martes, 3 de Octubre 2017 10:29:58
> Asunto: Re: Registros desaparecidos de la BD
> 
> Hola, aqui te adjunto una captura de la consulta que muestra los
> "registros" de la tabla en cuestión.
> El campo "id" es un campo serial, podes observar en las dos filas
> "pintadas" que salta el valor de id, que corresponde a los registros que se
> perdieron.
> 
> Si, empiezo a pensar que es algo como lo que tu comentas...pero
> todavia estoy buscando el error!
> Gracias!
> Saludos
> 
> 
> El 3 de octubre de 2017, 09:45, Alvaro Herrera
> escribió:
> 
> > Fernando A escribió:
> > > Estimados,
> > > en tres ocasiones, me encuentro con que han desaparecido algunos
> > registros
> > > de distintas tablas de una BD,.
> >
> > Por favor explica a qué te refieres con que "han desaparecido algunos
> > registros".  ¿cómo identificas que desaparecieron?
> >
> > Lo que suena posible es que una transacción quedó sin cerrar, y luego se
> > cerró la conexión, dejando el mensaje del log que mostraste; todos los
> > cambios que se hicieron en esa transacción se pierden.
> >
> > --
> > Álvaro Herrerahttps://www.2ndQuadrant.com/
> > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
> >
> 

Los campos seriales (implementados con una sequence) son propensos a tener 
"baches".
Cuando se hace un nextval(), la secuencia *siempre* se incrementa, 
independientemente de si la transacccion termina en COMMIT o ROLLBACK

Entonces, ya no estariamos hablando de registros perdidos, solo de 
transacciones fallidas. El log te sabra indicar cuales fallan y porque.

Saludos,
Gerardo



Re: Argumentos en pg_dump

2017-07-29 Thread Gerardo Herzig


- Mensaje original -
> De: "José Fermín Francisco Ferreras" 
> Para: "Lista PostgreSQL" 
> Enviados: Sábado, 29 de Julio 2017 11:12:35
> Asunto: Argumentos en pg_dump
> 
> Buenos días!
> 
> 
> Hace un tiempo tengo un pg_dump dentro de un archivo por lotes y todo bien me
> realiza el backup diario de mi base de datos en postgresql.
> 
> 
> Pero resulta que trato de ejecutarla hoy y me dice que pg_dump tiene
> demasiados argumentos, y yo no habia ningun cambio.
> 
> 
> Datos:
> 
> 
> "Pg_dump tiene demasiados argumentos en la línea de ordenes, empezando por
> BaseDatos."
> 
> Sistema operativo: MS Windows Server 2012 R2
> 
> Postgresql 9.5
> 
> 
> Linea del backup:
> 
> 
> @echo off
> 
> for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
>  set dow=%%i
>  set month=%%j
>  set day=%%k
>  set year=%%l
>)
> 
> set datestr=%month%-%day%-%year%_%time::=%
> set ARCHIVO_BACKUP=BaseDatos_%datestr%.sql
> 
> "C:\Program Files\PostgreSQL\9.5\bin\pg_dump.exe" --host localhost --port
> 5432 -U user -F c -v -f -b %ARCHIVO_BACKUP% "BaseDatos"
> 
> pause
> 
> 
> 
> A que se debe este problema repentino??

No seria '-f %ARCHIVO_BACKUP% -b' ?



Re: Consulta

2017-07-25 Thread Gerardo Herzig


- Mensaje original -
> De: "Carolina Izaziga M." 
> Para: pgsql-es-ay...@postgresql.org
> Enviados: Martes, 25 de Julio 2017 17:35:45
> Asunto: Consulta
> 
> Hola,soy nueva en postgres, tengo una consulta:
> 
> Quisiera hacer búsquedas en 2 tablas con la misma estructura
> 
> 
> TABLA1
> 
>  item,  nom, apell  diagnostico
>1  FERNANDO  CHAVEZHEB
>2  FERNANDO  FERNANDEZ NEU
>3  CARLA MERCADO   CAN
> 
> TABLA2
> 
>  item,   nom, apell,diagnostico
>5  JUANRIVERA  BRON
>6  CARLA   MERCADO BRON
>7  FIO SANTOS  HEB
> 
> Si hago una búsqueda en la tabla 1 de una personas hago lo siguiente
> 
> SELECT * FROM TABLA1
> 
>   Where nom='FERNANDO' and apell='CHAVEZ';
> 
> 
> La query me devuelve
> 
>  item,  nom, apell  diagnostico
>1  FERNANDO  CHAVEZHEB
> 
> 
> Pero si quiero hacer la misma búsqueda en ambas tablas a la vez, quiero
> buscar nom=CARLA y apell=MERCADO y que me devuelva el resultado de la
> búsqueda de la tabla 1 y 2.
> 
> 
> Muchas gracias

> 
> --
> M. Carolina Izaziga Mercado
> *Gestión de Riesgos LA/FT *
>

Podrias armarte una vista con la UNION de esas tablas: (untested)

CREATE VIEW diagnosticos AS 
  SELECT * from tabla1
   UNION ALL
  SELECT * from tabla2;

Y luego el select lo haces unicamente sobre la vista:
SELECT * from diagnosticos where nom='FERNANDO' and apell='CHAVEZ';

HTH
Gerardo