Re: Fallo en función

2019-05-31 Thread Martin Marques
El 31/5/19 a las 08:10, José Vicente Zahonero García escribió:
> Hola, tengo esta función:
> CREATE OR REPLACE FUNCTION inserciones(trayecto varchar, tempo varchar, 
> espacio numeric)
>  returns void AS $$
>  
> declare
> 
>  spaces integer;
>  hora integer;
>  minuto integer;
>  segundo integer;
>  resultado real;
>  tiempo_en_minutos real;
>  calorias real;
>  
>  
> begin
>   
> spaces := espacio*1000;

spaces es entero, y espacio numerico. Aunque multipliques por 1000,
tener que hacer un cast a entero.

> hora := cast(substring(tempo from 1 for 2));
> minuto := cast(substring(tempo from 4 for 2));
> segundo := cast(substring(tempo from 7 for 2));

Estas usando mal la funcion cast. Imagino que la idea es hacer un cast a
entero.

https://www.postgresql.org/docs/current/sql-createcast.html

> hora := hora*3600;
> minuto := minuto*60> resultado := 
> ((spaces/(hora+minuto+segundo))*3.6);
> tiempo_en_minutos := ((hora+minuto+segundo)/60);
> calorias := (70*0.21)*tiempo_en_minutos;
>
> insert into datos (recorrido,tiempo,distancia,calorias,kmh,fecha) values 
> (trayecto,tempo,spaces,calorias,resultado,current_date); 
> 
> end; 
> $$ language 'plpgsql';
> Al ejecutarla me da el error:
> Unterminated dollar quote started at position 0 in SQL $$ language 
> 'plpgsql';. Expected terminating $$

Habrás pegado mal la funcion porque a mi no me da ese error. Si me da
error en los cast() de arriba en los que no estas especificando el tipo
al que debe convertirse el valor.


-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services




Re: Conflicto entre pg_dump y transacción.

2018-05-03 Thread Martin Marques
El 03/05/18 a las 09:59, Alvaro Herrera escribió:
> Federico Pascual escribió:
> 
>> pg_dump -F c -v -f "$archivo_export" -n "\"$esquema\"" "$dbname"
>> 1>$archivo_log 2>$archivo_logerr
>>
>> Donde las variables son reemplazadas por sus valores correspondientes.
>>
>> El error que aparece en el log es el siguiente:
>>
>> 2018-05-02 20:13:39 GMT+3 postgres stg ERROR:  cancelando la sentencia
>> debido a un conflicto con la recuperación
>> 2018-05-02 20:13:39 GMT+3 postgres stg DETALLE:  La consulta del usuario
>> pudo haber necesitado examinar versiones de tuplas que debían eliminarse.
> 
> Interesante lío.  Me pregunto si funcionaría hacer esto
> 
> PGOPTIONS=--hot_standby_feedback=1 pg_dump -Fc 

Eso no va a funcionar ya que hot_standby_feedback requiere un sighup del
postmaster para applicar el cambio.

$ PGOPTIONS='-c hot_standby_feedback=1' psql -h localhost
psql: FATAL:  el parámetro «hot_standby_feedback» no se puede cambiar en
este momento

> La idea es que el parámetro hot_standby_feedback se active para la
> sesión de pg_dump, con lo cual evitas que un VACUUM en el primario
> elimine tuplas que el pg_dump necesita.

Estaba a punto de recomendar usar los parámetros
max_standby_streaming_delay y max_standby_archive_delay y recorde que el
standby es sincronico, por lo que congelaria las transacciones en el
maestro.

Saludos

-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



Re: Ayuda sobre permisos de usuario

2018-03-12 Thread Martin Marques
El 12/03/18 a las 10:22, Marcos Michel Martinez Perez escribió:
> Saludos lista, necesito saber como puedo hacer que un usuario de
> postgres al conectarse solamente le salga la BD del servidor al que
> tiene permisos, es decir yo tengo n bases de datos pero quiero que
> solamente vea la que tiene permisos

Si lo que queres es que no vea las otras bases de datos que hay en el
sistema, no se puede, ya que pg_database es un catalog global.

Muchas veces se hay preguntado esto y lamentablemente asi es como
funciona. Cualquiera puede ver las bases de datos en el cluster.

Lo que si se puede hacer es restringir el acceso a cada base de datos
con el privilegio de CONNECT con las sentencias REVOKE y GRANT:

REVOKE CONNECT ON DATABASE database_name
FROM { [ GROUP ] role_name | PUBLIC }

Con eso el usuario verá que existe la base de datos, pero no se podrá
conectar a ella.

Saludos,

-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



Re: actualizar postgres en windows

2018-02-11 Thread Martin Marques
El 11/02/18 a las 05:30, jvenegasperu . escribió:
> Buen dia a todos
> 
> Alguno sabe como puedo actualizar postgres 10.1 a 10.2 en windows?

Detienes postgres, instalas los nuevos binarios y arrancas nuevamente el
servicio de postgres.

O hay alguna otra duda que no esté explícitamente en la pregunta de arriba?


-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



Re: Mejorar velocidad de backup en postgres

2017-11-29 Thread Martin Marques
El 29/11/17 a las 16:40, Edwin Quijada escribió:
> Alvaro, a que te refieres con lo de respaldo fisico y no logico ?
> 
> Si usas pg_dump supongo que es un respaldo fisico? Que diferencia hace
> Barman

Lo que produce pg_dump es un respaldo lógico, ya que o que tenes son
sentencias SQL o codificadas para que pg_restore las recupere. Otra
cualidad es que tando el respaldo como el recupero se hacen con
conexiones al servidor (pg_dump se conecta para extraer toda la data, y
lo mismo pg_restore o psql si es un respaldo plano)

Un backup físico es el que realizo copiando los archivos de datos
directamente desde el filesystem. Antiguamente uno corría un tar o rsync
y guardabamos el resultado en algún almacenamiento externo.

Ahora usamos herramientas como pg_basebackup para tomar respaldos
físicos. Barman usa pg_basebackup para realizar los respaldos, aunque si
quieres respaldos incrementales vas a tener que usar rsync.

Espero te haya servido esta explicación.

Saludos,

-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



Re: Informacion archivos base de datos

2017-10-27 Thread Martin Marques
El 27/10/17 a las 11:50, Ronald Viscarra escribió:
> contras: posible corrupcion al almacenar datos binarios

Eso no es cierto. Seguro la aplicación tenia algún bug y guardo el
binario en algún formato que lo corrompió.

Saludos,

-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



Re: Informacion archivos base de datos

2017-10-27 Thread Martin Marques
El 27/10/17 a las 15:43, Luis Fernando Lopez Aguilar escribió:
> contras no deberia existir de ninguna clase el unico caso que
> tampoco es contra es incremento de almacenamiento masivo, pero cual es
> el miedo terabytes? petabytes?

La contra es de performance. Es mucho más rápido/eficiente copiar
directamente a disco que insertarlo en la BBDD donde debe pasar por el
parser.

Tambien hay otras contras dependiendo del tipo de almacenamiento que
usen en postgres (bytea vs. large object)

Con bytea los datos terminan en la tabla toast, a menos que el binario
sea muy chico (menos de 4kb). Ahí los datos además se comprimen, lo que
es más lento aún.

Si usan LO los datos van al catalogo, lo que no permite, por ejemplo,
replicar los datos. Tambien es muy, pero muy lento si hay que hacer un
pg_dump de los LO y hay una cantidad importante de objetos (millones de
objectos).

A pesar de esto, yo recomiendo guardar los datos en la BBDD por
integridad referencial.

Saludos,

-- 
Martín Marquéshttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services