Consulta de ddl trigger

2020-09-18 Thread Stephen Amell
Buenas tardes lista!

¿saben si puedo capturar el comando exacto de ddl que me están ejecutando,
tipo un alter table?

Pgaudit tiene todo lo que necesito, salvo esto.

Xq en la docu dice que no se puede usar el dato del campo command
directamente.


Re: pg_basebackup falla casi al terminar

2019-09-10 Thread Stephen Amell

Hola, se me ocurren dos cosas rápidas para mirar:

La primera es que pases el mensaje de error, hay un -v de verbose, como 
para ir viendo.
La segunda que mires los permisos / owners de los objetos. Típicamente 
encontrás cosas con root dentro de la carpeta de postgres y esto lo hace 
fallar.


Salu2

On 2019-09-10 04:02, Horacio Miranda wrote:

No veo una opcion para que continue.

On 10/09/2019 4:57 PM, Carlos T. Groero Carmona wrote:

Hola lista,

Estaba realizando un pg_basebackup y casi terminando 99.9% falla 
debido a que tenia una copia del postgresql.conf hecha con el usuario 
root y entonces el pg_basebackup no pudo completar el proceso.


Por lo que vi solo me falta el postgres.conf y los archivos del 
~/global/pg_control


Hace un tiempo me paso y termine copiando los archivos por scp y 
listo, pero me pregunto si el pg_basebackup tiene alguna opcion para 
volver a intentar o reanudar el proceso desde donde fallo?


Por lo que he leido tienes que volver a empezar, pero quizas estoy 
perdiendome algo.


Thanks,
Carlos






Re: Replicación + upgrade

2019-08-14 Thread Stephen Amell

Hola,

Yo creo que vas a tener que empezar de cero. Base y demás.

Por las dudas, espera otra opinion.


On 2019-08-14 04:56, Ruben Fitó wrote:

Hola lista.

Tengo PG9.5  con Streaming replicación con intención de upgradar a PG11.4.

Después de upgradar la master, podría upgradar la rèplica y me 
volvería a sincronizar?


Gracias de antemano.

Saludos.

--
*Ruben Fitó *
Software Engineer
Ubiquat Technologies, SL
r.f...@ubiquat.com 
www.ubiquat.com 

Tota la informació continguda en aquest document i arxius adjunts és 
CONFIDENCIAL protegida per llei de secret comercial. Si l'ha rebut per 
error, si us plau elimini'l i posi's en contacte amb l'emissor.


All information contained in this document and any attachments are 
CONFIDENTIAL and protected under trade secret laws. If you receive 
this message by mistake, please delete it and notify it immediately to 
the sender.


Re: WAL estan utilizando demasiado disco

2019-06-03 Thread Stephen Amell
Los wal son la "diferencia" desde el ultimo base backup asi que tendrias 
que guardar, al menos los wals desde este ultimo. La cantidad de dias 
que quieras guardar depende del base.


Conoces barman u otro soft similar que administran los respaldos y los 
wal automáticamente?





On 2019-06-03 13:49, Carlos T. Groero Carmona wrote:
Tambien me percate que estamos guardando los WAL desde que migre a ese 
servidor 5/12/2019 deberian ser los WAL guardados por mas de 15 dias?


Disculpa por poner tantas preguntas en diferentes correos, solo en la 
medida que voy troublueshooting el problema y encontrando razones del 
porque tengo 2.9Tb de WAL cuando me BD es solo 2.1TB me voy 
questionando la configuracion que tengo en mis cuatro servidores.




On Mon, Jun 3, 2019 at 11:38 AM Carlos T. Groero Carmona 
mailto:cton...@gmail.com>> wrote:


Tenia

wal_keep_segments

---

4096


Lo reduje a la mitad:

wal_keep_segments

---

2048

(1 row)


Cada Archivo es the 16MB, pero tenia todos los servidores usando
el mismo directorio en db2, por lo que deberia ser
4x4096x16MB=256GB pero esa carpeta tiene 2.9TB


Alguna otra configuracion que deberia chekear?

Grcias


On Mon, Jun 3, 2019 at 11:09 AM Carlos T. Groero Carmona
mailto:cton...@gmail.com>> wrote:

Gracias Sthepen por tu pronta respuesta,
Esa configuration debe ser realizada en el servidor master or
en db2?

Gracias...

On Mon, Jun 3, 2019 at 11:06 AM Stephen Amell
mailto:mrstephenam...@gmail.com>>
wrote:

busa wal keep segments, ponele 40 y juga con el el wal max
size, nose
1gb... asi guardas 40 x 1 gbs de wal (en archivos de 16
mbs creo recorar)

On 2019-06-03 12:53, Carlos T. Groero Carmona wrote:
> Hola Lista,
>
> Tengo 4 servidores con Postgres 9.6,
> db1.db_server Primary
> db2.db_server hotstandby (#1)
> db3.db_server hotstandby (DR) que lo tengo en cascading
replication
> desde db2
> db4.db_server hotstandby (Azure) que lo tengo en
cascading replication
> desde db2
> en todos los servidores tengo la misma declaracion en el
postgresql.conf
>
> *archive*_command = 'rsync -az --compress-level=1 %p
> pdb2_ip:/data/9.6/*archive*/%f'
>
> dd
>
>
> /data es un LV con 5TB SSD internal:
>
> Algunos datos del espacio por principales carpetas:
>
> 2.1TB /data/9.6/data
>
> 2.9TB ?data/9.6/archive
>
>
> Tenemos alguna manera de configurar postgres 9.6 para
guardar por
> menos tiempo los archivos WAL?
>
>
> Alguna recomendacion ademas de adicionar espacio?
>
>
> Gracias como siempre por la ayuda,
>
> Carlos
>






Re: Como replicar una Base de Datos de un Server Local a un Server en la Nube

2019-04-23 Thread Stephen Amell

Hola, hoy en dia, hay dos tipos de repllica, binaria y logica:

Binaria, con repmgr que basicamente copia los wal todo el tiempo y  
nativa, que permite seleccionar que replicar (contra, hay que mantener 
el esquema remoto)



On 2019-04-23 03:31, Horacio Miranda wrote:


Creo que lo que necesitas es replicación ?

https://www.howtoforge.com/tutorial/postgresql-replication-on-ubuntu-15-04/

Si lo que quieres es tener un respaldo Full y luego aplicar 
incrementales.


https://www.2ndquadrant.com/en/blog/incremental-backup-barman-1-4-0/

Hay personas en la lista que te pueden orientar mejor yo creo ( 
trabajan en 2ndquadrant ).


On 23/04/2019 12:29 PM, bru...@gmail.com wrote:

Buenos tardes gente,

Como realizo la copia de un backup total o un backup diferenciado, de 
una BD_LOCAL hacia una Base de Datos Remota, de tal manera que tenga 
dos BBDD identicas, No sé si sirva pero mi BBDD Remota la monte en un 
server AWS. y puedo usar cualquier version de PostgreSQL debido a que 
es una idea para un proyecto nuevo. A ser posible una BBDD 
Diferenciado ayudaría mucho para evitar el sobrepeso de los archivos 
a transmitir.


Desde ya muchas gracias


Saludos,





Re: merge de datos cluster de base de datos postgres

2019-03-28 Thread Stephen Amell

Hola, Sip, funciona. usa rsync para la copia nomas ;P

On 2019-03-28 12:12, Hellmuth Vargas wrote:

Hola Lista
Tiempo sin poner pereque por aquí quiero  planetarles la siguiente 
situación: hay dos cluster PostgreSQL 9.5.6 una de 1,3 TB y otra de 
600GB ambas 24x7, ya se adquirió una maquina nueva con 5TB de espacio 
y la idea seria consolidar los dos cluster en uso solo en el menor 
tiempo posible, no es posible subirlos a PostgreSQL 9.6/10  porque 
tienen desarrollos  y aplicaciones  legacy...


la situación esta así:

Cluster1 bases de datos: base_a, base_b
Cluster2 bases de sdatos: base_c, base_d

Nuevocluster: base_a, base_,  base_c, base_d
Se que la opción  convencional  es hacer un dump / restore y en las 
nuevas versiones pg_logical. Pero quería plantearles lo siguiente 
(exponiéndome al escarnio publico),.. es posible copiar la carpeta de 
la base de datos de data/base y ponerla en otra base de datos?


algo como

1. en NuevoCluster  creo la base de datos base_a, el sistema crea la 
carpeta data/base/123

2. apago NuevoCluster
3. copio el contenido de la carpeta Cluster1/data/base/456 (que 
corresponde a base_a) a NuevoCluster/data/base/123/

3. cierro los ojos y subo el NuevoCluster

Claro NuevoCluster y los cluster1 y cluter2 están en la misma  
arquitectura y las mismas versiones de base de datos


muchas gracias por sus aportes!!!



--
Cordialmente,

Ing. Hellmuth I. Vargas S.






Re: Probelmas con TOAST excede espacio en disco

2019-03-25 Thread Stephen Amell

2 ideas:


- un df -T para ver que no sea fat y se haya pasado de los 4 gbs por 
archivo?


- quota?




On 2019-03-25 10:17, Edwin Quijada wrote:




*De:* Martín Marqués 
*Enviado:* lunes, 25 de marzo de 2019 07:09
*Para:* Edwin Quijada; pgsql-es-ay...@postgresql.org
*Asunto:* Re: Probelmas con TOAST excede espacio en disco
El 24/3/19 a las 20:21, Edwin Quijada escribió:
> Hola!
> Estoy creando una BD con dos tablas para almacenar audios de muy pequeno
> tamano pero bastantes. El problema es que cuando iban 2 millones de
> records dentro de la tabla me da un error de que no hay espacio pero la
> verdad es que tengo 200GB dentro de ese disco. El error que me dio este.
> Pregunta es cuando se maneja esta cantidad de TOAST, la BD ya tenia
> 120GB con apenas 2.5 millones, puede dar algun error. Estoy almacenando
> todo en bytea , la idea es tener una BD solo de audios , el TOAST puede
> dar este error

El error es mas que claro: "No space left on device"

Estás 100% seguro que la partición donde estaba escribiendo esos datos
tenia aun lugar para extender dicha relación?

Saludos,

Si revise por eso pense que era algun problema de TOAST
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G  4.0K   16G   1% /dev/shm
tmpfs            16G  1.8M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sdb2       913G  481G  432G  53% /
tmpfs           6.0G     0  6.0G   0% /var/spool/asterisk/monitor

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




Re: Leer plan de ejecución

2019-03-21 Thread Stephen Amell

Hola,

Conoces explain.depesz.com?

https://explain.depesz.com/s/Tr3k

Ahi lo vas a poder ver un poco mas comodo, en la parte de stats, vas a 
ver en que se te va el plan... en este caso hay un "CTE Scan" y al usar 
fact_acct se va de viaje leyendo.



On 2019-03-21 12:36, Hamilton Marenco wrote:
"CTE Scan on data  (cost=751548.65..751551.65 rows=100 width=1036) 
(actual time=208954.192..208956.133 rows=866 loops=1)"
"  Filter: ((inicio <> '0'::numeric) OR (debe <> '0'::numeric) OR 
(haber <> '0'::numeric) OR (fin <> '0'::numeric))"

"  Rows Removed by Filter: 1617"
"  CTE parameters"
"    -> Seq Scan on c_period  (cost=0.00..6.40 rows=1 width=14) 
(actual time=0.103..0.120 rows=1 loops=1)"

" Filter: (c_period_id = '1000394'::numeric)"
" Rows Removed by Filter: 191"
"  CTE data"
"    -> Sort  (cost=751542.00..751542.25 rows=100 width=350) (actual 
time=208954.182..208954.561 rows=2483 loops=1)"

" Sort Key: val.value"
" Sort Method: quicksort  Memory: 464kB"
" ->  Hash Join  (cost=124.76..751538.68 rows=100 width=350) (actual 
time=99.584..208932.477 rows=2483 loops=1)"
"     Hash Cond: ("substring"((val.value)::text, 1, 4) = 
(gp.value)::text)"
"     ->  Nested Loop  (cost=2.54..7.18 rows=100 width=190) (actual 
time=47.159..90.465 rows=2483 loops=1)"
"           ->  Nested Loop  (cost=2.26..4.28 rows=1 width=186) 
(actual time=47.138..53.093 rows=2483 loops=1)"
"                 ->  CTE Scan on parameters p (cost=0.00..0.02 rows=1 
width=154) (actual time=0.110..0.111 rows=1 loops=1)"
"                 ->  HashAggregate  (cost=2.26..3.26 rows=100 
width=32) (actual time=47.024..51.500 rows=2483 loops=1)"
"                       Group Key: 
unnest(getrecursiveacctsi(getrecursiveacctslvl('{1003174,1003452,1003569,1003605,1003652,1003972,1004173}'::numeric[], 
'1'::numeric, '4'::numeric)))"
"                       ->  Result  (cost=0.00..1.01 rows=100 
width=32) (actual time=45.289..45.708 rows=2483 loops=1)"
"           ->  Index Scan using c_elementvalue_pkey on c_elementvalue 
val  (cost=0.28..2.90 rows=1 width=36) (actual time=0.010..0.011 
rows=1 loops=2483)"
"                 Index Cond: (c_elementvalue_id = 
(unnest(getrecursiveacctsi(getrecursiveacctslvl('{1003174,1003452,1003569,1003605,1003652,1003972,1004173}'::numeric[], 
'1'::numeric, '4'::numeric)"
"     ->  Hash  (cost=88.21..88.21 rows=2721 width=29) (actual 
time=2.358..2.358 rows=2721 loops=1)"

"           Buckets: 4096  Batches: 1  Memory Usage: 199kB"
"           ->  Seq Scan on c_elementvalue gp (cost=0.00..88.21 
rows=2721 width=29) (actual time=0.022..1.194 rows=2721 loops=1)"

"     SubPlan 2"
"       ->  Result  (cost=0.00..0.26 rows=1 width=32) (actual 
time=0.876..0.876 rows=1 loops=2483)"

"     SubPlan 3"
"       ->  Result  (cost=0.00..0.26 rows=1 width=32) (actual 
time=0.801..0.801 rows=1 loops=2483)"

"     SubPlan 5"
"       ->  Result  (cost=0.26..0.52 rows=1 width=32) (actual 
time=167.654..167.655 rows=1 loops=211)"

"             InitPlan 4 (returns $4)"
"               ->  Result  (cost=0.00..0.26 rows=1 width=32) (actual 
time=1.539..1.540 rows=1 loops=211)"

"     SubPlan 6"
"       ->  Result  (cost=0.00..0.26 rows=1 width=32) (actual 
time=9.366..9.366 rows=1 loops=2272)"

"     SubPlan 7"
"       ->  Result  (cost=0.00..0.26 rows=1 width=32) (actual 
time=0.892..0.892 rows=1 loops=2483)"

"     SubPlan 10"
"       ->  Aggregate  (cost=2238.58..2238.59 rows=1 width=32) (actual 
time=25.526..25.526 rows=1 loops=211)"

"             InitPlan 8 (returns $9)"
"               ->  CTE Scan on parameters  (cost=0.00..0.02 rows=1 
width=16) (actual time=0.002..0.003 rows=1 loops=1)"
"             ->  Hash Semi Join  (cost=3.02..2237.79 rows=309 
width=4) (actual time=24.567..25.496 rows=14 loops=211)"

"                   Hash Cond: (fact_acct.account_id = (unnest($11)))"
"                   ->  Seq Scan on fact_acct (cost=0.00..2225.25 
rows=2317 width=11) (actual time=17.046..23.482 rows=2136 loops=211)"

"                         Filter: (c_period_id = $9)"
"                         Rows Removed by Filter: 46524"
"                   ->  Hash  (cost=1.77..1.77 rows=100 width=32) 
(actual time=1.616..1.616 rows=19 loops=211)"

"                         Buckets: 1024  Batches: 1  Memory Usage: 9kB"
"                         ->  Result  (cost=0.26..0.77 rows=100 
width=32) (actual time=1.604..1.607 rows=19 loops=211)"

"                               InitPlan 9 (returns $11)"
"                                 ->  Result  (cost=0.00..0.26 rows=1 
width=32) (actual time=1.598..1.598 rows=1 loops=211)"

"     SubPlan 12"
"       ->  Aggregate  (cost=1517.00..1517.01 rows=1 width=32) (actual 
time=6.580..6.580 rows=1 loops=2272)"

"             InitPlan 11 (returns $12)"
"               ->  CTE Scan on parameters parameters_1 
(cost=0.00..0.02 rows=1 width=16) (actual time=0.003..0.021 rows=1 
loops=1)"
"             ->  Index Scan using factacct_idxmayor2 on fact_acct 
fact_acct_1  (cost=0.41..1516.97 rows=3 width=4) 

start_value de secuencias siempre en 1

2019-02-14 Thread Stephen Amell

Hola lista!

Hoy les vengo con una consulta sobre las secuencias. Me pasa que si hago 
un dump schema only, o incluso consultando via 
information_schema.sequence, noto que no siempre los valores de 
start_value estan bien.


¿Es un bug? ¿information_schema no saca la info desde el mismo lugar que 
pgadmin?


me pasa en 9.3, 9.6, incluso en 11

Por ejemplo, tengo un seq llamado servidores_id_seq, se que va por el 
139, lo miro en la definicion del pgadmin y lo veo ok:


CREATE SEQUENCE public.servidores_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 139
  CACHE 1;

Ahora bien, lo consulta por information_schema.sequences y lo muestra en 1:

# select * from information_schema.sequences where sequence_name = 
'servidores_id_seq';


-[ RECORD 1 ]---+---

sequence_catalog    | db_monitoreo
sequence_schema | public
sequence_name   | servidores_id_seq
data_type   | bigint
numeric_precision   | 64
numeric_precision_radix | 2
numeric_scale   | 0
start_value | 1
minimum_value   | 1
maximum_value   | 9223372036854775807
increment   | 1
cycle_option    | NO

Hago un pg_dump -S y da 1 tambien:

CREATE SEQUENCE public.servidores_id_seq START WITH 1 INCREMENT BY 1 NO 
MINVALUE NO MAXVALUE CACHE 1;



Saludos,



Re: Funciones y Plan Caching

2019-02-08 Thread Stephen Amell

Hola Daymel,

Gracias por contestar,

Me pasa que armo una función, la ejecuto 3 o 4 veces sin problema, 
resuelve en menos de un segundo, barbaro pero... en un momento dado, a 
veces la 5ta ejecución o la 6ta, pasa a demorar 5 minutos así de la nada 
y ya no se recupera.


La recompilo, apenas agregando un espacio en blanco en el código, y se 
repite el comportamiento. Así fue que buscando, llegue a esta parte de 
la documentación y no se como salvarlo (por ahora voy como dice, con el 
execute) pero no es algo que me termine por gustar como solución.


Por eso, la pregunta.

Saludos,

On 2019-02-08 15:41, Daymel Bonne wrote:


Hola Stephen:

El vie., 8 de feb. de 2019 a la(s) 13:34, Stephen Amell 
(mrstephenam...@gmail.com <mailto:mrstephenam...@gmail.com>) escribió:


Hola Lista,

Les escribo para preguntarles si alguien noto esto a la hora de
tener mal rendimiento en funciones:


41.10.2. Plan Caching

The PL/pgSQL interpreter parses the function's source text and
produces an internal binary instruction tree the first time the
function is called (within each session). The instruction tree
fully translates the PL/pgSQL statement structure, but individual
SQL expressions and SQL commands used in the function are not
translated immediately.

As each expression and SQL command is first executed in the
function, the PL/pgSQL interpreter parses and analyzes the command
to create a prepared statement, using the SPI manager's
|SPI_prepare| function. Subsequent visits to that expression or
command reuse the prepared statement. Thus, a function with
conditional code paths that are seldom visited will never incur
the overhead of analyzing those commands that are never executed
within the current session. A disadvantage is that errors in a
specific expression or command cannot be detected until that part
of the function is reached in execution. (Trivial syntax errors
will be detected during the initial parsing pass, but anything
deeper will not be detected until execution.)

PL/pgSQL (or more precisely, the SPI manager) can furthermore
attempt to cache the execution plan associated with any particular
prepared statement. If a cached plan is not used, then a fresh
execution plan is generated on each visit to the statement, and
the current parameter values (that is, PL/pgSQL variable values)
can be used to optimize the selected plan. If the statement has no
parameters, or is executed many times, the SPI manager will
consider creating a /generic/ plan that is not dependent on
specific parameter values, and caching that for re-use. T*ypically
this will happen only if the execution plan is not very sensitive
to the values of the PL/pgSQL variables referenced in it. If it
is, generating a plan each time is a net win. See PREPARE
<https://www.postgresql.org/docs/9.6/sql-prepare.html> for more
information about the behavior of prepared statements.*

*Because PL/pgSQL saves prepared statements and sometimes
execution plans in this way, SQL commands that appear directly in
a PL/pgSQL function must refer to the same tables and columns on
every execution; that is, you cannot use a parameter as the name
of a table or column in an SQL command. To get around this
restriction, you can construct dynamic commands using the PL/pgSQL
EXECUTE statement — at the price of performing new parse analysis
and constructing a new execution plan on every execution.*

The mutable nature of record variables presents another problem in
this connection. When fields of a record variable are used in
expressions or statements, the data types of the fields must not
change from one call of the function to the next, since each
expression will be analyzed using the data type that is present
when the expression is first reached. EXECUTE can be used to get
around this problem when necessary.

https://www.postgresql.org/docs/9.6/plpgsql-implementation.html

Mas alla del execute que menciona, se sabe de alguna alternativa,
¿quizás los nuevos stored procedures?


¿Alternativa a que? Está claro cómo es que funciona la caché del plan 
de ejecución en la documentación. Tienes algún problema en específico?


Saludos


--
Daymel Bonne
Database Consultant, Training & Services
2ndQuadrant - PostgreSQL Solutions for the Enterprise
https://www.2ndQuadrant.com/ <https://www.2ndquadrant.com/>



Re: Consulta sobre archivo history del wal

2019-02-08 Thread Stephen Amell

Hola Horacio:

Mil gracias por la respuesta, la cuestión es simplemente que el archivo 
no esta. Revise permisos y de mas y nada, no esta.
No se porque lo busca ni porque no esta, el problema ahora lo tengo 
porque quiero hacer streaming de los wal con barman y lo primero que 
hace es fallar por la falta de este archivo.

¿Alguna idea de como forzarlo?


On 2019-02-07 20:02, Horacio Miranda wrote:
Revisa los persmisos de barman, el usuario que lo esta ejecutando y 
postgres, por lo general postgres crea los directosios con 700 ( solo 
postgres puede entrar ).



On 8/02/2019 7:12 AM, Stephen Amell wrote:

HOla Lista,

Una consulta, tengo este error en el log de postgres y no logro 
determinar a que se debe:


Me doy cuenta que vienen desde la ejecucion de barman, al iniciar la 
copia de los wal pero en el server de barman no se activa y pasa cada 
un minuto:


2019-02-07 14:34:27.545 -03 192.168.0.160(56910) [unknown] 
streaming_barman 1 idle > ERROR:  could not open file 
"pg_wal/0002.history": No such file or directory


2019-02-07 14:37:27.416 -03 192.168.0.160(56928) [unknown] 
streaming_barman 1 idle > ERROR:  could not open file 
"pg_wal/0002.history": No such file or directory
2019-02-07 14:38:27.740 -03 192.168.0.160(56944) [unknown] 
streaming_barman 1 idle > ERROR:  could not open file 
"pg_wal/0002.history": No such file or directory


¿Alguien me podría ayudar a ver que es?






Funciones y Plan Caching

2019-02-08 Thread Stephen Amell

Hola Lista,

Les escribo para preguntarles si alguien noto esto a la hora de tener 
mal rendimiento en funciones:



   41.10.2. Plan Caching

The PL/pgSQL interpreter parses the function's source text and produces 
an internal binary instruction tree the first time the function is 
called (within each session). The instruction tree fully translates the 
PL/pgSQL statement structure, but individual SQL expressions and 
SQL commands used in the function are not translated immediately.


As each expression and SQL command is first executed in the function, 
the PL/pgSQL interpreter parses and analyzes the command to create a 
prepared statement, using the SPI manager's |SPI_prepare| function. 
Subsequent visits to that expression or command reuse the prepared 
statement. Thus, a function with conditional code paths that are seldom 
visited will never incur the overhead of analyzing those commands that 
are never executed within the current session. A disadvantage is that 
errors in a specific expression or command cannot be detected until that 
part of the function is reached in execution. (Trivial syntax errors 
will be detected during the initial parsing pass, but anything deeper 
will not be detected until execution.)


PL/pgSQL (or more precisely, the SPI manager) can furthermore attempt to 
cache the execution plan associated with any particular prepared 
statement. If a cached plan is not used, then a fresh execution plan is 
generated on each visit to the statement, and the current parameter 
values (that is, PL/pgSQL variable values) can be used to optimize the 
selected plan. If the statement has no parameters, or is executed many 
times, the SPI manager will consider creating a /generic/ plan that is 
not dependent on specific parameter values, and caching that for re-use. 
T*ypically this will happen only if the execution plan is not very 
sensitive to the values of the PL/pgSQL variables referenced in it. If 
it is, generating a plan each time is a net win. See PREPARE 
 for more 
information about the behavior of prepared statements.*


*Because PL/pgSQL saves prepared statements and sometimes execution 
plans in this way, SQL commands that appear directly in a 
PL/pgSQL function must refer to the same tables and columns on every 
execution; that is, you cannot use a parameter as the name of a table or 
column in an SQL command. To get around this restriction, you can 
construct dynamic commands using the PL/pgSQL EXECUTE statement — at the 
price of performing new parse analysis and constructing a new execution 
plan on every execution.*


The mutable nature of record variables presents another problem in this 
connection. When fields of a record variable are used in expressions or 
statements, the data types of the fields must not change from one call 
of the function to the next, since each expression will be analyzed 
using the data type that is present when the expression is first 
reached. EXECUTE can be used to get around this problem when necessary.


https://www.postgresql.org/docs/9.6/plpgsql-implementation.html

Mas alla del execute que menciona, se sabe de alguna alternativa, 
¿quizás los nuevos stored procedures?




Re: Consulta sobre replicación entre tablas

2019-01-21 Thread Stephen Amell

Hola Marcelo!

¿una vista no te sirve? ¿quizás una materializada?

Saludos,

On 2019-01-21 08:12, marcelo mendoza wrote:
Buenos días, necesito hacer una replicación entre dos tablas en 
esquemas distintos de una misma base de datos Postgresql, mi idea 
inicial era hacer un trigger que se dispare entre los inserts y 
updates, pero entra en un loop infinito, ambas tablas tienen 
estructuras distintas y sólo necesito esto mientras se desarrolla un 
nuevo sistema, posterior a eso, la tabla vieja de clientes ya no será 
necesaria, hay alguna forma de hacerlo sólo en la base de datos no en 
la aplicación? Alguna experiencia?


Desde ya muchas gracias!

--
Marcelo


Re: POSTGRES DEJA DE FUNCIONA

2019-01-08 Thread Stephen Amell

Buenos días,

Quizás mirando las ultimas lineas de log de postgres puedas ver si fallo 
algo antes de apagarse.


Salu2

On 2019-01-08 11:04, Daymel Bonne wrote:

Hola:

El mar., 8 de ene. de 2019 a la(s) 08:31, FLOR AVILA ELIAS 
(fav...@ditelgroup.com ) escribió:


Estimados Señores,

Hace unos dias tengo un problema que hace que el postgres deje de
funciona, cabe indicar que trabaja en un servidor Centos 6, con
postgres 9-3 y pgbouncer, agradeceria si me pueden dar
indicaciones de que informacion necesitan para poder brindarles.
Yo adjunto informacion:
- cpuinfo
- meminfo
- postgresql.conf
- pg_hba.conf
- pgbouncer.ini

Cabe indicar que estuvo funcionando correctamente, hasta que el
viernes quitaron unas redes publicias, porque antes teniamos 3 y
ahora solo hay una.

Desde ahi a ciertas horas se cae el postgres pero el apache sigue
funcionando.


Hay cosas bastante raras con los datos que envías.

Según el fichero meminfo20.txt ese servidor tiene de RAM 3906016KB 
(3.9 GB aprox), sin embargo el postgresql.conf en shared_buffers tiene 
6400MB (6GB aprox), ummm bastante raro no crees? Más sospechoso aún es 
que effective_cache_size tenga el valor de 4228MB, valor menor que 
shared_buffers. Todo un despropósito esta configuración.
Si postgres se dejó de funcionar de repente, debió generar un fichero 
.core en el directorio de datos. Con ayuda especializada se puede 
investigar la causa del fallo.
Sabías que la versión 9.3 está descontinuada desde el año pasado? Creo 
que te quedan pocas opciones para buscar ayuda seria si no actualizas.

Suerte. Saludos


Re: MOVER DIRECTORIO DE POSTGRES-9.3 EN CENTOS 6

2019-01-08 Thread Stephen Amell

Hola:

Otra alternativa, bastante simple, es apagar el motor, mover la carpeta 
data, encender el motor con el -D a la nueva ruta (si vas por servicio, 
hay que tocar el /etc/init.d/postgresql-9.3, la ruta PGDATA y PGLOG)


Saludos,

On 2019-01-08 01:24, Anthony Sotolongo wrote:


Hola Flor, puedes crearte un Tablespace en /home/pgdata y mover las 
tablas para alla con un ALTER TABLE ... set tablespace 
tu_nuevo_tablespace...


también puede ser  modificando tu variable de entorno PGDATA, 
indicandole el nuevo directorio, copiando previamente la data para ahi 
con los permisos requeridos




Saludos



El 08-01-19 a las 00:33, FLOR AVILA ELIAS escribió:

Buenas noches,
El directorio /var/lib en donde se instala por default el 
postgres-9.3 tiene una particion muy pequeña, lo que quisiera es 
colocar el directorio en /home/pgdata.


Cabe indicar que tengo informacion que no quiero perder en /var/lib

Pueden ayudarme por favor?
Gracias
*Flor de María A. Avila Elias*


PG11 Particionamiento y PKs

2018-12-20 Thread Stephen Amell

Hola Lista!

Como andan?

Hoy les escribo porque tengo un problema con el nuevo particionamiento 
de postgres 11, el objetivo es conservar la PK de una tabla 
particionando por fecha.


En un prototipo cree una tabla, copiando la idea de la original:

CREATE TABLE public.daf
(
    id serial NOT NULL,
    fecha timestamp without time zone,
    testo character varying(100),
    PRIMARY KEY (id)   ---> le digo que pk quiero
) partition by range ( fecha );    ---> y por que quiero particionar

No le gusta, ya lo veía venir por lo visto en la docu:

ERROR:  insufficient columns in PRIMARY KEY constraint definition
DETAIL:  PRIMARY KEY constraint on table "daf" lacks column "fecha" 
which is part of the partition key.

SQL state: 0A000

Pruebo considera la fecha parte de la pk...

CREATE TABLE public.daf
(
    id serial NOT NULL,
    fecha timestamp without time zone,
    testo character varying(100),
    PRIMARY KEY (fecha, id)
) partition by range ( fecha );

-- OK, la creo

Pongo un par de hijas para probar rápidamente:


CREATE TABLE dafant partition of daf for values from ('-infinity') to 
('2018-11-01');
CREATE TABLE dafdic partition of daf for values from ('2018-11-01') to 
('2018-12-01');
CREATE TABLE dafene partition of daf for values from ('2018-12-01') to 
('2018-12-31');
CREATE TABLE dafpos partition of daf for values from ('2019-01-01') to 
('infinity');



Cargo un par de registros:


INSERT INTO public.daf(     fecha, testo) values  ( '2018-11-01', 'dos');
INSERT INTO public.daf(     fecha, testo) values  ( '2019-11-01', 'dosbis');

select * from daf;

daf=> select * from daf;

 id |    fecha    | testo
+-+
  5 | 2018-11-01 00:00:00 | dos
  6 | 2019-11-01 00:00:00 | dosbis

(2 rows)

hasta aca todo bien, ahora confirmo la pk compuesta:

daf=> INSERT INTO public.daf(id, fecha, testo) values  ( 5, 
'2018-11-01', 'dos');

ERROR:  duplicate key value violates unique constraint "dafdic_fecha_id_key"

ahora cambiando la fecha para que la combinación no de:

daf=> INSERT INTO public.daf(id, fecha, testo) values  ( 5, 
'2018-10-01', 'dos');

INSERT 0 1


daf=> select * from daf;
 id |    fecha    | testo
+-+
  5 | 2018-10-01 00:00:00 | dos  <-- DUP ID
  5 | 2018-11-01 00:00:00 | dos  <-- DUP ID
  6 | 2019-11-01 00:00:00 | dosbis
(3 rows)

Hasta acá, todo esperado, tengo dos id 5 para dos fechas distintas, pero 
me mata no poder conservar la pk que necesito que es solo el campo ID.


Con la replica por triggers, esto lo tengo resuelto, pero me extraña que 
con la nueva forma no haya saltado esto.


¿Alguna sugerencia o workarround para estos casos?

Mil gracias!




Re: Como evitar los caracteres raros cuando hago backup o importacion

2018-10-23 Thread Stephen Amell
Hola Micky, seguramente estes usando un resplando en texto plano, no? 
con -Fc en el dump lo haces en binario y no pasan esas cosas.


Lo mismo, revisa que la base de orgen y destino esten en el mismo encoding.


On 2018-10-23 11:09, Micky Khan wrote:

Masters.
Consulta :
Cuando hago una importacion de datos cual es la mejor manera de hacerlo ?
Me salen algunos caracteres raros como : Ã?Â?O

Una vez que ya lo pase y cuando hago el backup y quiero restaurarlo me 
sale que el campo es pequeño para algunas tablas


Mi BD la tengo en Latin1







Re: pg_hba.conf para aplicaciones

2018-09-11 Thread Stephen Amell

Hola Jorge:

¿Es posible limitar el numero de conexiones de cada usuario a una?
Si es asi, ¿se puede poner con auto inicio la app? justo al login, para 
que ocupe esa conexión, y con una tarea programada, que se relance ante 
un eventual cierre de la misma antes de que puedan conectase por afuera


¿Por lo menos o usan la app o se conectan a por afuera?

Otra, es que en el servidor del motor, corra un cron cada 10 segs, mire 
la pg_activity y mate las conexiones que no son de la app.


Otra, si la app, va por dns, podes usar pgbouncer en otro port (o 
incluso mover la instancia a otro puerto) y bloquear el 5432 (o mas 
entretenido, dejar un motor falso ahi corriendo)


Averigua si los usuarios son admin de su equipo.

On 2018-09-10 21:21, Alvaro Hernandez wrote:
-Se tienen tantos usuarios de motor como usuarios de aplicación haya, 
ya que no hay un control de usuario por la aplicación.




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

2018-07-24 Thread Stephen Amell

Hola desde: https://yum.postgresql.org/packages.php


On 2018-07-24 11:54, Yessica Brinkmann wrote:
Disculpen  la consulta pero, saben por si acaso de dónde puedo 
descargar el Postgresql 8.4 para Linux? Porque en la página oficial 
aparece a partir de la versión 9.3.
Y otra cosa, saben si podré instalar la versión 8.4 sobre mi Debian 
9.2.1, o si tendré que cambiar mi sistema operativo para poder instalarlo?

Saludos cordiales,
Yessica

El 23 de julio de 2018, 23:31, Yessica Brinkmann 
mailto:yessica.brinkm...@gmail.com>> 
escribió:


Muchas gracias por la respuesta!
Saludos,
Yessica

El 23 jul., 2018 10:56 PM, "Alvaro Herrera"
mailto:alvhe...@2ndquadrant.com>> escribió:

Yessica Brinkmann escribió:
> Ustedes piensan que el Index Adviser funcionaría con la
versión 9.0 de
> Postgresql? Esta versión fue liberada el 20 de Setiembre de
2010. O debería
> buscar una versión anterior como la 8.3 u 8.4?

Yo partiría con 8.4, que es lo que está documentado que funciona.


-- 
Álvaro Herrera https://www.2ndQuadrant.com/

PostgreSQL Development, 24x7 Support, Remote DBA, Training &
Services






Re: Streaming replication contra Logical Replication

2018-07-24 Thread Stephen Amell
Yo la haría con Barman en 9x y con la nativa en 10 (que es barman dentro 
del código), el tema pasa mas por el switch over, reapuntar las apps y 
demás.



On 2018-07-23 17:24, Edwin Quijada wrote:

Que tal.!
Tengo un servidor en la nube con Postgres 10 y 5 bases de datos en el, 
quermeos crear una replica de este servidor en caso de alguna caida o 
algun problmea en el master.
Para esto hemos creado un tunel SSH entre ambos servidores para la 
comunicacion, ahora solo nos hace falta saber cual metodo de 
replicacion usar.
Anteriormente habia usado streaming con muy buenos resultados pero 
como ha llegado la replicacion logica pues he querido echarle un 
vistazo. Je leido algunos pro y contra sobre esta y uno de los que mas 
pesa es que logical utiliza menos ancho de banda que streaming pero 
hay algo que aun no entiendo , en caso de que la comunicacion se caiga 
entre servidores que pasaria con mi replica, en streaming no habia 
problema porque el tamano de los archivos wal era grande pues cuando 
llegaba la comunicacion todo se replicaba hacia la copia sin problemas 
, que pasa si esto sucede con logical?


Me gustaria oir opiniones sobre que usar y de paso si en un momento de 
caida del server principal podria usar esat replica.


Gracias





Re: Replicacion en postgres 10

2018-07-02 Thread Stephen Amell

Buenos días Carlos!

Consulta, ¿Las NBs son "Solo lectura" en su base local?
Si es así, lo veo posible. Ya que el maestro seria el servidor central 
actualizando múltiples esclavos en las nbs. Depende de la actividad del 
maestro va a consumir mucho espacio.
Si, en cambio, las nbs van a ser los maestros o algo tipo multimaster, 
simplemente, no lo haría.


Otras cosas a considerar: ¿Cada cuanto tiempo se va a conectar cada 
esclavo? ¿con que tipo de conexión y cuanto tiempo conectado (digo va a 
tener que bajar bastante data)?


Por la parte "Otras preguntas", ¿se van a conectar a una VPN? si es asi, 
va a ser facil indicar un rango para los esclavos, sino quizás con un 
no-ip o algo así para identificarlos.




On 2018-07-02 10:45, Carlos Perez wrote:

Estimados:
Tengo un cliente que necesita que nuestra aplicacion se pueda 
ultilizar en una notebook para sus corredores y tener un servidor 
centralizado como tienen ahora.


Mi pregunta es:
 se puede poner a cada notebook un postgres local en condicion de 
slave para que cuando haya internet en las notebook se replique contra 
el servidor central?


Otras preguntas:
 . esto se puede hacer considerando que los equipos slave van a estar 
en cualquier conexion y por ende van a tener ip's variables... no asi 
con el server que tiene una ip fija.


Saludos.


--
--
Carlos Enrique Perez, +5411-95402-8667
Managing Director
* ___*
*|   |> syswarp *
*|___| *
www.syswarp.com 





Re: Consulta sobre Barman

2018-04-27 Thread Stephen Amell
Mil gracias Daymel, tal cual, cambie esas lineas como decías y funciono, 
ahora bien, no probe el restore.

Les cuento la semana que viene como me fue.


def main():
    """
    The main method of Barman
    """

*    try:**
**    reload(sys)**
**    sys.setdefaultencoding('utf8')**
**    except:**
**    pass*

    p = ArghParser(epilog='Barman by 2ndQuadrant (www.2ndQuadrant.com)')
    p.add_argument('-v', '--version', action='version',
   version='%s\n\nBarman by 2ndQuadrant 
(www.2ndQuadrant.com)'

   % barman.__version__)


On 2018-04-27 14:37, Stephen Amell wrote:


Si si, por supuesto!

Probando...


On 2018-04-27 14:23, Daymel Bonne wrote:
El 27 de abril de 2018, 12:17, Daymel 
Bonne<daymel.bo...@2ndquadrant.ec 
<mailto:daymel.bo...@2ndquadrant.ec>> escribió:


Hola Stephen:

    2018-04-27 10:18 GMT-05:00 Stephen Amell <stephenam...@inbox.lv
<mailto:stephenam...@inbox.lv>>:

Buenos días lista, como va?

Estoy empezando a probar Barman 2.3
(http://docs.pgbarman.org/release/2.3/
<http://docs.pgbarman.org/release/2.3/>), pero estoy teniendo
un problema con una base LATIN1. Mas abajo les dejo el log a
ver si me pueden orientar, por lo pronto me estoy uniendo al
grupo de barman a ver si ahi encuentro algo (pero es en
ingles ;P)

¿Alguien sabe si hay alguna limitación con los diccionarios
que respalda barman?


2018-04-27 11:48:04,547 [16909] barman.cli ERROR: 'ascii'
codec can't encode character u'\xab' in position 455: ordinal
not in range(128)
See log file for more details.

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/barman/cli.py", line
1123, in main
    p.dispatch(pre_call=global_config)
  File "/usr/lib/python2.7/site-packages/argh/helpers.py",
line 55, in dispatch
    return dispatch(self, *args, **kwargs)
  File
"/usr/lib/python2.7/site-packages/argh/dispatching.py", line
174, in dispatch
    for line in lines:
  File
"/usr/lib/python2.7/site-packages/argh/dispatching.py", line
277, in _execute_command
    for line in result:
  File
"/usr/lib/python2.7/site-packages/argh/dispatching.py", line
231, in _call
    result = function(namespace_obj)
  File "/usr/lib/python2.7/site-packages/barman/cli.py", line
215, in backup
    server.backup()
  File "/usr/lib/python2.7/site-packages/barman/server.py",
line 989, in backup
    self.backup_manager.backup()
  File "/usr/lib/python2.7/site-packages/barman/backup.py",
line 369, in backup
    msg_lines = str(e).strip().splitlines()
UnicodeEncodeError: 'ascii' codec can't encode character
u'\xab' in position 455: ordinal not in range(128)

2018-04-27 11:49:02,101 [17847] barman.config DEBUG:
Including configuration file: vm-latin1.cx.ar.conf
2018-04-27 11:49:02,101 [17845] barman.config DEBUG:
Including configuration file: latin1.cx.ar.conf
2018-04-27 11:49:02,102 [17847] barman.cli DEBUG: Initialised
Barman version 2.3 (config: /etc/barman.conf, args: {'debug':
False, 'command': 'cron', 'quiet': True, 'format': 'console'})

Esto es un issue conocido que se solucionará en la próxima
versión. La solución temporal es la siguiente:

Modifica en el fichero
/usr/lib/python2.7/site-packages/barman/cli.py la función main y
al principio de la función haz el cambio siguiente:

def main(): try: reload(sys) sys.setdefaultencoding('utf8')
except: pass # ... el resto de la función main aqui

 Saludos


Si soluciona, déjanos saber.

Saludos
--
Daymel Bonne https://www.2ndQuadrant.com/ <https://www.2ndquadrant.com/>
Database Consultant, Training & Services







Re: Consulta sobre Barman

2018-04-27 Thread Stephen Amell

Si si, por supuesto!

Probando...


On 2018-04-27 14:23, Daymel Bonne wrote:
El 27 de abril de 2018, 12:17, Daymel 
Bonne<daymel.bo...@2ndquadrant.ec 
<mailto:daymel.bo...@2ndquadrant.ec>> escribió:


Hola Stephen:

2018-04-27 10:18 GMT-05:00 Stephen Amell <stephenam...@inbox.lv
<mailto:stephenam...@inbox.lv>>:

Buenos días lista, como va?

Estoy empezando a probar Barman 2.3
(http://docs.pgbarman.org/release/2.3/
<http://docs.pgbarman.org/release/2.3/>), pero estoy teniendo
un problema con una base LATIN1. Mas abajo les dejo el log a
ver si me pueden orientar, por lo pronto me estoy uniendo al
grupo de barman a ver si ahi encuentro algo (pero es en ingles ;P)

¿Alguien sabe si hay alguna limitación con los diccionarios
que respalda barman?


2018-04-27 11:48:04,547 [16909] barman.cli ERROR: 'ascii'
codec can't encode character u'\xab' in position 455: ordinal
not in range(128)
See log file for more details.

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/barman/cli.py", line
1123, in main
    p.dispatch(pre_call=global_config)
  File "/usr/lib/python2.7/site-packages/argh/helpers.py",
line 55, in dispatch
    return dispatch(self, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/argh/dispatching.py",
line 174, in dispatch
    for line in lines:
  File "/usr/lib/python2.7/site-packages/argh/dispatching.py",
line 277, in _execute_command
    for line in result:
  File "/usr/lib/python2.7/site-packages/argh/dispatching.py",
line 231, in _call
    result = function(namespace_obj)
  File "/usr/lib/python2.7/site-packages/barman/cli.py", line
215, in backup
    server.backup()
  File "/usr/lib/python2.7/site-packages/barman/server.py",
line 989, in backup
    self.backup_manager.backup()
  File "/usr/lib/python2.7/site-packages/barman/backup.py",
line 369, in backup
    msg_lines = str(e).strip().splitlines()
UnicodeEncodeError: 'ascii' codec can't encode character
u'\xab' in position 455: ordinal not in range(128)

2018-04-27 11:49:02,101 [17847] barman.config DEBUG: Including
configuration file: vm-latin1.cx.ar.conf
2018-04-27 11:49:02,101 [17845] barman.config DEBUG: Including
configuration file: latin1.cx.ar.conf
2018-04-27 11:49:02,102 [17847] barman.cli DEBUG: Initialised
Barman version 2.3 (config: /etc/barman.conf, args: {'debug':
False, 'command': 'cron', 'quiet': True, 'format': 'console'})

Esto es un issue conocido que se solucionará en la próxima
versión. La solución temporal es la siguiente:

Modifica en el fichero
/usr/lib/python2.7/site-packages/barman/cli.py la función main y
al principio de la función haz el cambio siguiente:

def main(): try: reload(sys) sys.setdefaultencoding('utf8')
except: pass # ... el resto de la función main aqui

 Saludos


Si soluciona, déjanos saber.

Saludos
--
Daymel Bonne https://www.2ndQuadrant.com/ <https://www.2ndquadrant.com/>
Database Consultant, Training & Services





Re: modificar tipo de dato postgres

2018-04-17 Thread Stephen Amell
Solo quiero decir que con este comentario, Jaime, me tiraste media 
biblioteca de SQL al tacho.


Como que char, varchar y text son lo mismo!!!??? Me puse a leer y si, es 
así nomas [1]... entonces, ¿se puede usar indices char ops sobre text? 
¿a que costo? Me imagino que indices por text serán muy pesados tanto 
como el campo en si.


[1] https://www.postgresql.org/docs/current/static/datatype-character.html

Gracias por el aporte!


On 2018-04-16 01:57, Jaime Casanova wrote:

2018-04-15 12:14 GMT-05:00 jvenegasperu :

Hola buen dia estoy modificando las longitudes de algunos campos

al ejecutar

ALTER TABLE deta_tipos ALTER COLUMN deta_tip_nombre TYPE character
varying(350)

obtengo este error

ERROR:  no se puede alterar el tipo de una columna usada en una regla o
vista
   DETAIL:  regla «_RETURN» en vista v_rrhh_ausencias depende de la columna
«deta_tip_nombre»

el campo deta_tip_nombre es character varying (50)

no estoy cambiando el tipo de dato estoy modificando su longitud bueno ahora
tengo que borrar modificar y volver a crear la vista hay alguna manera mas
rapida de hacer esto?



esta vez, no. para la próxima, no uses varchar sino text (no obtienes
ninguna ventaja usando varchar en lugar de text) y si necesitas
limitar el tamaño del texto le pones un constraint check
(char_length(campo) = longitud_permitida)





Re: [MASSMAIL]Seq Scan como lo procesa Postgresql

2018-04-11 Thread Stephen Amell
Podes empezar mirando las consultas que usan e indizando los campos del 
where y los join.



On 2018-04-11 09:13, gilberto.casti...@etecsa.cu wrote:

Hola,

Puedes ir a la wiki https://wiki.postgresql.org/wiki/Español

On 2018-04-10 23:41, mauricio pullabuestan wrote:

Tengo una tabla que tiene al rededor de 250 mil registros y pesa unos
170 mb, solamente tiene su PK

Esta tabla se consulta un promedio de 1000 veces por día al no tener
indices en los que se pueda apoyar, se esta haciendo un Seq Scan.

Tengo entendido que Postgres sube toda la tabla a memoria es decir 170
mb para hacer Seq Scan y si ejecuta un promedio de 1000 estaríamos,
haciendo que  Postgres se leyera 170 Gb, esta es la forma en que lo
hace o lo hace de otra manera?

La consulta demora al rededor de 0.28 segundos, aparentemente
inofensiva pero esta cargando de trabajo innecesario al servidor, se
creo un indice filtrado y se corrigió el problema.

Cuales son los parametros para medir la carga de trabajo del servidor?

Estamos en un proceso de optimización y me gustaría saber cual es la
carga de trabajo antes y después.

Gracias
Mauricio







Re: buscar referenciado

2018-04-09 Thread Stephen Amell

Hola Kernel, ¿buscas algo asi?

|SELECT tc.constraint_name,tc.table_name,kcu.column_name,ccu.table_name 
AS foreign_table_name,ccu.column_name AS foreign_column_name FROM 
information_schema.table_constraints AS tc JOIN 
information_schema.key_column_usage AS kcu ON tc.constraint_name 
=kcu.constraint_name JOIN information_schema.constraint_column_usage AS 
ccu ON ccu.constraint_name =tc.constraint_name WHERE constraint_type 
='FOREIGN KEY'AND tc.table_name='mytable';|



de 
https://stackoverflow.com/questions/1152260/postgres-sql-to-list-table-foreign-keys


On 2018-04-09 08:46, Kernel wrote:

Hola,

Me pregunto si existe alguna función que me diga en que tablas esta 
referenciado un dato.


supongamos que tengo una tabla maestra (A) que tiene un campo id como 
PRIMARY KEY, a esta se referencian otras tablas (B),(C), etc .., 
tienen un FOREIGN KEY a la tabla (A)




Antes de borrar un determinado valor de la tabla(A), me gustaria saber 
en que tablas esta referenciado .


Un Saludo






Re: Optimizar consulta a tabla con fechas y horas

2018-03-08 Thread Stephen Amell

Hola Jose,

Pase el explain por https://explain.depesz.com/s/rdZT para verlo un poco 
mas grafico, en la solapa stats podes ver en que se va el consumo.
Ahí veo mucho seq scan,  que cuando lo ves desde la solapa html me hace 
apostar por un tema de cast + indices en m1_7, m1_8 y m1_9


Salu2


On 2018-03-07 17:54, jvenegasperu . wrote:

Buen dia ahora me ha tocado lidiar con una tabla de fechas y horas

Tengo la consulta que muestro lineas mas abajo y luego el resultado 
del explain analyze por favor alguna sugerencia para mejorar el tiempo 
de respuesta


hasta el momento la tabla solo tiene estos dos indices que le agregue 
pero solo he logrado dismunir el tiempo en 5 segundos la consulta 
tarda aproximadamente 2 minutos


CREATE INDEX trans_dt ON trans (dt);
create index emp_fecha_hora on trans (empid,CAST (dt AS date),CAST(dt 
as time));


SELECT m.empid AS dni, m.empname AS nombre_empleado, '201803' AS 
periodo, m.fecha,

dia_semana(m.fecha) AS dia_semana, (
    SELECT min(m1.dt::time without time zone) AS min FROM trans m1
    WHERE m1.empid = m.empid AND m.fecha = m1.dt::date

    AND (m1.dt::time without time zone - d.hora_ingreso) > 
'-00:59:00'::interval
    AND (m1.dt::time without time zone - d.hora_ingreso) <= 
d.hora_salida::interval AND
    m1.dt >= d.fecha_ini and m1.dt <= d.fecha_fin and d.turno_id = 1 
or d.turno_id = 3 and m1.dt::time without time zone < d.hora_salida

    GROUP BY (m1.dt::date)limit 1) AS hor_ing_ma,
    CASE WHEN ((( SELECT min(m1.dt::time without time zone) AS min 
FROM trans m1

                WHERE m1.empid = m.empid AND m.fecha = m1.dt::date
                AND (m1.dt::time without time zone - d.hora_ingreso) > 
'-00:59:00'::interval
                AND (m1.dt::time without time zone - d.hora_salida) <= 
'00'::interval
                AND m1.dt >= d.fecha_ini and m1.dt <= d.fecha_fin and 
d.turno_id = 1
                or d.turno_id = 3 GROUP BY (m1.dt::date) limit 1)) - 
d.hora_ingreso) >= '00:01:00'::time without time zone::interval
                THEN (( SELECT min(m1.dt::time without time zone) AS 
min FROM trans m1

                    WHERE m1.empid = m.empid AND m.fecha = m1.dt::date
                    AND (m1.dt::time without time zone - 
d.hora_ingreso) > '-00:59:00'::interval
                    AND (m1.dt::time without time zone - 
d.hora_salida) <= '00'::interval

                    AND m1.dt >= d.fecha_ini and m1.dt <= d.fecha_fin
                    and d.turno_id = 1 or d.turno_id = 3 GROUP BY 
(m1.dt::date) limit 1)) - d.hora_ingreso ELSE NULL::interval END AS 
tardanz_ma,
                    ( SELECT min(m1.dt::time without time zone) AS min 
FROM trans m1

                    WHERE m1.empid = m.empid AND m.fecha = m1.dt::date
                    AND (m1.dt::time without time zone - 
d.hora_salida) > '-00:59:00'::interval
                    AND (m1.dt::time without time zone - 
d.hora_salida) <= d.sal_max_ma::interval

                    AND m1.dt >= d.fecha_ini and m1.dt <= d.fecha_fin
                    and d.turno_id = 1 or d.turno_id = 3 GROUP BY 
(m1.dt::date) limit 1) AS hor_sal_ma,
                    CASE WHEN ((( SELECT min(m1.dt::time without time 
zone) AS min FROM trans m1

                    WHERE m1.empid = m.empid AND m.fecha = m1.dt::date
                    AND (m1.dt::time without time zone - 
d.hora_salida) > '-00:59:00'::interval
                    AND (m1.dt::time without time zone - 
d.hora_salida) <= d.sal_max_ma::interval

                    AND m1.dt >= d.fecha_ini and m1.dt <= d.fecha_fin
                    and d.turno_id = 1 or d.turno_id = 3 GROUP BY 
(m1.dt::date) limit 1 )) - d.hora_salida) >= '00:01:00'::time without 
time zone::interval THEN (( SELECT min(m1.dt::time without time zone) 
AS min FROM trans m1 WHERE m1.empid = m.empid AND m.fecha = 
m1.dt::date AND (m1.dt::time without time zone - d.hora_salida) > 
'-00:59:00'::interval AND (m1.dt::time without time zone - 
d.hora_salida) <= d.sal_max_ma::interval AND m1.dt >= d.fecha_ini and 
m1.dt <= d.fecha_fin and d.turno_id = 1 or d.turno_id = 3 GROUP BY 
(m1.dt::date) limit 1 )) - d.hora_salida ELSE NULL::interval END AS 
tiem_compensar_ma, ( SELECT min(m1.dt::time without time zone) AS min 
FROM trans m1 WHERE m1.empid = m.empid AND m.fecha = m1.dt::date AND 
(m1.dt::time without time zone - d1.hora_ingreso) > 
'-00:59:00'::interval AND (m1.dt::time without time zone - 
d1.hora_salida) <= '00'::interval AND m1.dt >= d1.fecha_ini and m1.dt 
<= d1.fecha_fin and d1.turno_id = 2 or d1.turno_id = 4 GROUP BY 
(m1.dt::date) limit 1 ) AS hor_ing_ta, CASE WHEN ((( SELECT 
min(m1.dt::time without time zone) AS min FROM trans m1 WHERE m1.empid 
= m.empid AND m.fecha = m1.dt::date AND (m1.dt::time without time zone 
- d1.hora_ingreso) > '-00:59:00'::interval AND (m1.dt::time without 
time zone - d1.hora_salida) <= '00'::interval AND m1.dt >= 
d1.fecha_ini and m1.dt <= d1.fecha_fin and d1.turno_id = 2 or 
d1.turno_id = 4 GROUP BY (m1.dt::date) limit 1)) - 

Re: IPv6 y Estadísticas

2018-03-07 Thread Stephen Amell

   Buenos días,

   Les cuento que paso en estos días. Basado en lo dicho por Alvaro y
   Francisco (en un correo separado) ambos me sugieren que es un tema
   de resolucion al localhost, revise, y encontré, que en el /etc/hosts
   seguía mencionándose el ::1 por olvido al desactivar el ipv6.

   En todos los casos, el ipv6 esta desactivado con:

   sysctl -w net.ipv6.conf.all.disable_ipv6 = 1
   sysctl -w net.ipv6.conf.default.disable_ipv6 = 1
   sysctl -p
   o
   systemctl restart network.service

   El ping localhost, retorna el 127.0.0.1 sin mas ni mas:

   # ping localhost
   PING localhost (127.0.0.1) 56(84) bytes of data.
   64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.035 ms
   64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.031 ms

   pero en los /etc/hosts sigue figurando:

 cat /etc/hosts
   127.0.0.1   localhost localhost.localdomain localhost4
   localhost4.localdomain4
   ::1 localhost localhost.localdomain localhost6
   localhost6.localdomain6

   un simple  sed -i '/::1/d' /etc/hosts, quita la linea del ::1

   y un pg_ctl restart -D  (con reload no alcanza)

   Esperamos un rato a que pase el el colector de estadisticas... o si
   estamos con poca paciencia hacemos un vacuum analyze a mano...

   y listo!
   magia!




On 2018-03-02 14:09, Alvaro Herrera wrote:

Stephen Amell escribió:

Buenas tardes Lista!

Hoy les escribo por una consulta sobre el recolector de estadísticas. Estoy
teniendo muchos casos de consultas que dicen:

"LOG:  usando estadísticas añejas en vez de actualizadas porque el
recolector de estadísticas no está respondiendo"

Notamos que esto nos pasa en los servidores donde se deshabilito el IPv6,
incluso se quito del pg_hba. Tras varias horas de búsqueda encontramos ( en
esta pagina https://postgrespro.com/list/thread-id/1561117 ) a alguien con
un problema similar. Quien cuenta que debió volver a habilitarlo para que
funcione correctamente.
Y dicho y hecho, así nos volvió a funcionar.

Hmm, haz que el nombre "localhost" resuelva sólo a la dirección ipv4 y
debería funcionar.

¿Por qué inhabilitar IPv6?





Re: Problema enconding postgresql !!!

2018-01-19 Thread Stephen Amell

Hola Angelo,

Quizás puedas cambiar el client_encoding en el postgres conf, si es que 
no lo setea la propia app al conectarse.


Saludos,


On 2018-01-19 10:43, Hellmuth Vargas wrote:

Hola Angelo

La respuesta corta es NO. No se puede cambiar esto en un cluster, para 
esto hay que crear un nuevo cluster y en el initdb especificarle el 
encoding deseado. Lo que si se puede hacer es crear una base de datos 
con un encoding diferente al default (empleando el template0) y migrar 
los datos a esta.


El 19 de enero de 2018, 08:31, Angelo Astorga> escribió:


Hola lista,
Existe alguna forma de cambiar el enconding a las BD default de
postgresql, es decir, a template1, template0 y postgres.

Adjunto pantallazo...

 select * from pg_database ;
  datname  | datdba | encoding |   datcollate   |   datctype    |
datistemplate | datallowconn | datconnlimit | datlastsysoid |
datfrozenxid | dattablespace |
      datacl

---++--+++---+--+--+---+--+---+-

 template1 |     10 |        8 | C              | C              |
t             | t            |    -1 |         12915 |       
 1873 |          1663 | {=c/post
gres,postgres=CTc/postgres}
 template0 |     10 |        8 | C              | C              |
t             | f            |    -1 |         12915 |       
 1873 |          1663 | {=c/post
gres,postgres=CTc/postgres}
 postgres  |     10 |        8 | C              | C              |
f             | t            |    -1 |         12915 |       
 1873 |          1663 |
 prueba    |  16386 |        8 | es_CL.iso88591 | es_CL.iso88591 |
f             | t            |    -1 |         12915 |       
 1873 |          1663 |


El problema es que este encoding no permite trabajar con "ñ" y
vocales con acento con un web service externo y como tal, estoy
teniendo problemas por ello.

Probé cambiando enconding a la BD prueba pero no resulto, me
parece que si o si se debe cambiar a las otras.

Agradecido desde ya.








--
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





Consulta sobre mantenimiento de bases de datos

2018-01-19 Thread Stephen Amell

Buenas! ¿Como están?

Hoy les vengo una consulta mas teórica que practica, ¿como detectar que 
objetos necesitan algún tipo de mantenimiento?


Es decir, ¿Que tengo que mirar para saber si a esta tabla la tengo que 
reindexar? ¿La tengo que reindexar o mejor le paso un vacuum analyze? ¿y 
si mejor dropeo y creo el indice de nuevo? ¿hace falta hacer algo?


Termina por ser algo casi místico.

Viendo lo comentado por Hellmuth, y otros casos que fui googleando, para 
bases de mucho select o mucho insert/update/delete o de procesos largos 
tipo dwh o de reproceso para analisis, etc. ¿hay una guiá de mantenimiento?


Saluods!








Re: borrado de algunos registros en tablas grandes

2018-01-19 Thread Stephen Amell
Por lo de "la aplicación que inserta estos datos esta implementada con 
Hibernate por lo tanto no es posible implementar particiones pues al 
insertar regresa 0 registros y falla la aplicación.", me ha pasado 
tambiem y aprovecho a preguntarle a quienes ya usan el Postgres 10: 
¿Saben si con la nueva forma de particionar tablas esto sigue retornando 
0 o si ya retorna el valor del id en los serial?



On 2018-01-18 17:43, Hellmuth Vargas wrote:

Hola Avaro

Mil gracias así procederé entonces

El 18 de enero de 2018, 15:34, Alvaro Herrera> escribió:


Hellmuth Vargas escribió:
> Hola Lista
>
> tengo un servidor PostgreSQL 9.4 en el cual se registra el log
de un IVR
> (atención telefónica  automatizada por menús) donde la tabla ya esta
> pesando 162GB, se tiene informacion desde el 2015 y se desea
conservar en
> linea solo el ultimo año (por cuestiones de espacio y
rendimiento), la
> aplicación que inserta estos datos esta implementada con
Hibernate por lo
> tanto no es posible implementar particiones pues al insertar
regresa 0
> registros y falla la aplicación. Se esta realizando un proceso
nocturno
> para mover los registros mas viejos de un año y y borrar los
mismos de la
> tabla  en cuestión. Dado el tamaño de la tabla, las
características de la
> maquina y que el servicio es 7x24  no es posible ejecutar un
VACUUM FULL
> para recuperar el espacio sino se ejecuta un VACUUM ANALYZE, por
lo tanto
> los datos nuevos deben insertarse en los bloques marcados como
libres por
> el vacuum, esto afectaría el rendimiento de las operaciones que
se hagan en
> la tabla (bloat, entre otros aspectos)?

Pienso que lo más barato sería acceder la BD directamente al hacer el
insert.  Como debería ser una operación muy específica, no hay que
modificar toda la aplicación sino sólo una pequeña parte.

Dicho esto, la verdad es que aplicar particionamiento post-facto es
operacionalmente bastante complicado -- vas a requerir varios bloqueos
en las tablas existentes para mover datos y establecer el ambiente
inicial, así que no sé qué tan factuble sea en tu caso.

Respecto a tu idea:  Yo creo que es factible.
Ejecutar VACUUM después de cada DELETE liberará el espacio para
que los
insert futuros puedan usarlo.  No se liberará espacio al sistema
operativo, pero esto no debería tener importancia.  Ejemplo: si haces
los DELETE de los registros de más de 104 semanas de edad una vez a la
semana, en un tiempo no muy largo deberías llegar a un estado
estacionario en el cual los nuevos inserts de cada semana van
usando el
espacio liberado por los de la semana X-104 que se acaban de borrar --
sin efecto negativo en el rendimiento.

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




--
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





Re: Extraer substring en texto con CR

2018-01-10 Thread Stephen Amell
|Hola Baru, Se me ocurren dos formas de luchar contra los CRs, la primera 
seria con splitpart y trabajarlo como un array trayendome la dimension 
que quiero o simplemente reemplazandolos y trabajar todo como un string 
En la docu, dice que ambas opciones funcionan en 8.1 |
||split_part 
|https://www.postgresql.org/docs/8.1/static/functions-string.html ||selectregexp_replace(field,E'[\\n\\r]+',' ','g') 
https://www.postgresql.org/docs/8.1/static/functions-matching.html |

Salu2
||


On 2018-01-10 12:46, baru gerardi wrote:

Hola lista

Tengo un campo char que contiene, a modo de ejemplo:
Apellido y Nombre: xx xx
DNI: 1231231231
Edad: xx
...
Este campo fue copypasteado de un documento de Word
y por lo tanto tiene insertados CR luego de cada dato cargado
En principio, el PgAdmin III version 1.12.3 que es el que funciona
con la version de Postgres que tengo (8.1.22) me muestra en la edicion
de este campo sólo hasta el primer CR (Apellido y Nombre: xx 
xx) y el resto no lo puedo ver

Tengo 2 preguntas:
1) Como puedo hacer para que el PgAdmin me muestre el campo completo
2) Necesito extraer las edades cargadas en este campo, pero la sentencia
SUBSTRING busca solo hasta el primer CR, lo mismo que muestra la edicion
Como deberia hacer la consulta?

Espero haber sido claro
Desde ya muchas gracias por la ayuda

Saludos
Baru

--
/Enviado desde mi Nokia 1100
/




Re: No hacer vavum a ciertas tablas.

2018-01-10 Thread Stephen Amell

Hola Mauricio, Podes setear el vacuum por tabla con algo asi:

ALTER TABLEtabla SET (
  autovacuum_enabled = true,
  autovacuum_vacuum_threshold = 50,
  autovacuum_analyze_threshold = 2
);

ojo los valores son al azar, en el pgadmin hay una solapa para esto en 
la parte de propiedades.



On 2018-01-10 11:57, mauricio pullabuestan wrote:

Buen día.

Tengo ciertas tablas con sus indices en las cuales solamente se hace insert y 
se consultan con mediana frecuencia.

Como decirle a postgres que no haga un vacuum a estas tablas?
Es buena practica hacer esto, tomando en cuenta que solamente se inserta y se 
consulta con mediana frecuencia.

Trabajo con PostgreSQL 9.6.6 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 
4.8.4-2ubuntu1~14.04.3) 4.8.4, 64-bit

Saludos
Mauricio.






Re: Drop user y Grantor <> Owner !

2017-12-18 Thread Stephen Amell

Hola,


On 2017-12-18 12:27, Alvaro Herrera wrote:

Stephen Amell escribió:

Hola, Alvaro

Si, lo primero que hice fue el reassign, y no da error, pero luego tiro el
drop y pincha.

Si, por pincha, quiero decir da error.

¿qué quieres decir "pincha"?  REASSIGN no modifica grantors ni ACLs --
para eso existe DROP OWNED BY.
No alcanzo a entender el "DROP OWNED BY" esto ¿me borraría los objetos 
también? ¿o se los asignaría a postgres por decir algo?

Encontré que el valor esta en en la tabla pg_catalog.pg_default_acl, estoy
tratando de editarla a ver si puedo cambiarlo directamente.

Modificar catálogos de sistema a mano es seguro de causar problemas
después, si es que llegan a quedar referencias al rol en pg_shdepend.
Tal cual lo dijiste, cambie los registros de pg_shdepend tambien y ahi 
salio el drop role sin problemas


update pg_catalog.pg_shdepend set refobjid = 10 where refobjid = 
293894::oid;


Entonces, solo me queda la duda, ¿hice mal al resolverlo via modificar 
las tablas del sistema, pero cual seria la forma de hacerlo correctamente?


Mil gracias again!


Drop user y Grantor <> Owner !

2017-12-18 Thread Stephen Amell

Buenos días Lista

Tengo un problemon!

Estoy tratando de dropear un usuario, pero no puedo porque posee 
dependencias, despues de un buen rato buscando, encontré que no es un 
owner de nada, sino un grantor de un default privilege. (gracias al \ddp)


El tema es que por mas "ALTER DEFAULT PRIVILEGES IN SCHEMA master REVOKE 
ALL ON TABLES FROM gp_oehp_escritura;"  sigue estando, no se borra...


¿Alguien me puede dar una mano para cambiar el grantor a postgres?

es un postgres 9.5.3

Desde ya, y como siempre, mil gracias a todos!



Re: [MASSMAIL] Re: Información encriptacion de data de una base de datos

2017-11-03 Thread Stephen Amell

Hola,

Les cuento, hace un tiempo encare un proyecto de anonimizar bases de 
datos y básicamente arme un vbs (quien sabe, un día lo paso a bash) que 
recibe como entrada un ini donde se indican los parámetros de 
configuración de como anonimizar cada tabla, y de esa tabla, que campos 
necesitan moverse de la mano (en conjunto, ej tipo y nro documento).


Como condición de uso es que la tabla tenga PK y no tenga uniques (se 
pueden borrar y rearmar al finalizar). Con todo esto, el script genera 
un update como el siguiente, por cada entrada del ini, o sea pueden ser 
varios por tabla:


 update public.odusdemo  set    txt = bis.txt, correo = bis.correo 
 from (  select ori.id, nue.txt, nue.correo  from ( 
 SELECT  o.id, o.txt, o.correo, 
 row_number() OVER (ORDER BY o.id::varchar) AS 
iddaf_odusdemosacude  FROM public.odusdemo o  ) 
ori  inner join  (  SELECT  p.id, p.txt, 
p.correo,  row_number() OVER (ORDER BY 
md5(random()::varchar)) AS iddaf_odusdemosacude  FROM 
public.odusdemo p  ) nue  on nue.iddaf_odusdemosacude = 
ori.iddaf_odusdemosacude    ) bis  where odusdemo.id = bis.id;



Una vez ejecutado, no se puede volver atrás y, si, hay partes 
harcodeadas. Le falta bastante para ser algo a gran escala, pero ya lo 
estoy usando y me gustaría tener algún feedback a ver que les parece.
No hay problema en compartir el vbs, incluso estaría bueno encararlo 
como un proyecto comunitario si alguien se copa en darme una mano.


Gracias por su tiempo, espero les sirva.




On 2017-11-03 13:54, Gilberto Castillo wrote:

Ricardo Alvarado escribió:

Gilberto algo parecido a ese ejemplo pero algo así un ejemplo

http://www.michaelkrenz.de/2012/08/05/how-to-anonymize-data-in-a-postgresql-database/


Ricardo y Alvaro es una buena idea, acá tenemos una aplicación para hacer
eso, pero es privada pues tendrían que dar el algoritmo para pasar los
datos  de un formato  a otro y no lo harán, ni expondrán es información.




[1]
tipo=p
host=192.168.150.90
port=5432
base=db_diego
esquema=public
tabla=odusdemo
random=no
campo=documento
user=postgres
pwd=

[2]
tipo=p
host=192.168.150.90
port=5432
base=db_diego
esquema=public
tabla=odusdemo
random=no
campo=txt,correo
user=postgres
pwd=






drop table odusdemo;

CREATE TABLE public.odusdemo
(
id serial NOT NULL,
txt character varying(50),
documento integer,
correo character varying(50),
PRIMARY KEY (id)
);

insert into odusdemo(txt,documento,correo) values ('hola', 27500086, 
'di...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('chau', 31624187, 
'h...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('quetal', 55002372, 
'b...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('comoestas', 
50654789,'c...@daf.com.ar');
insert into odusdemo(txt,documento,correo) values ('quetul', 12246789, 
'n...@daf.com.ar');

select  * from odusdemo ;


 update public.odusdemo
 settxt = bis.txt, correo = bis.correo
 from (
 select ori.id, nue.txt, nue.correo
 from (
 SELECT  o.id, o.txt, o.correo,
 row_number() OVER (ORDER BY o.id::varchar) AS 
iddaf_odusdemosacude
 FROM public.odusdemo o
 ) ori
 inner join
 (
 SELECT  p.id, p.txt, p.correo,
 row_number() OVER (ORDER BY md5(random()::varchar)) AS 
iddaf_odusdemosacude
 FROM public.odusdemo p
 ) nue
 on nue.iddaf_odusdemosacude = ori.iddaf_odusdemosacude
   ) bis
 where odusdemo.id = bis.id;

 select  * from odusdemo ;

Re: Ayuda Extension de Correo y ver schema en PgAdmin 4

2017-09-26 Thread Stephen Amell

Yo lo uso asi:

copy
  ( select 'Cuerpo del correo' )
to program
  'mutt -s "mail desde postgres" -- d...@mail.com'
with (
  format text
);

Barato y el mutt se lo pido al de redes, pero puede ser 
mail/sendmail/mailx/etc.



On 2017-09-26 11:19, jvenegasperu . wrote:

Hola a todos buen dia

Tuve necesidad de enviar correo directamente desde postgres asi que 
revise la extensión de Anthony Sotolongo aqui:


https://github.com/asotolongo/pgsmtp

Pero era para python 2.x La modifique para que pueda funcionar con 
python 3.4 y esta disponible aqui


https://github.com/thjack/pgsmtp_email_postgres

Esta funcionando pero y aqui viene la consulta por alguna razon la 
primera instruccion de la extencion


CREATE SCHEMA pgsmtp

A pesar de que se ejecuta sin problemas no puedo ver el schema desde 
pgadmin alguien sabe porque?


tambien intente colocando

create schema pgsmtp AUTHORIZATION postgres;

pero tampoco funciono es decir se crea el schema pero no se visualiza 
en PgAdmin 4 asi que bueno lo que hice fue


1.- crear manualmente primero el schema en pgadmin
2.- comentar la primera linea del archivo pgsmtppy3--0.1.1.sql

3.- ejecutar

create extension pgsmtppy3;

y luego probar como en el archivo del ejemplo de uso

Que piensan ustedes sera una falla de pgadmin 4 o como debo escribir 
esa primera instruccion para que pueda visualizarse el schema.


Por otro lado a la extension le faltan las validaciones es decir que 
pasa si no incluyes destinatarios de copia oculta o copia publica que 
mensajes de error se deben mostrar.


Aclaro que es la primera vez que escribo algo en python y sin revisar 
documentacion pase directamente a ir copiando partes de codigo que 
encontre googleando reemplazando el codigo de Anthony porque por aqui 
los jefes quieren las cosas para ayer asi que no esperen mucho jejeje


PD Solo probe con postgres 10 beta 4 a 64 bits sobre windows 7 de 64 
bits con los instaladores de EDB.


saludos


--
José Mercedes Venegas Acevedo
cel Mov RPC 964185205

Member of the PHP Documentation Group (Spanish)

 
	Libre de virus. www.avast.com 
 







Re:

2017-09-22 Thread Stephen Amell

Lista, queridos, compórtense con los invitados.

Guido:

1. Anda aca: https://www.postgresql.org/community/lists/subscribe/
2. pone tu correo
3. unsubscribe
4. elegí esta lista
5. Dale al link de confirmación que te vana mandar

Salu2


On 2017-09-22 10:05, Javier Chávez B. wrote:

usa google! y no jodas!

2017-09-22 9:50 GMT-03:00 Maximi89 >:


Si aprendes como preguntar, tal vez alguien se apiade de tí y te
responda.


El 22/9/2017 9:34, "๏̯͡๏ Guido Barosio" > escribió:

Averigalo solo en lugar de romperle las pelotas a los demas.

;)

2017-09-22 8:12 GMT-03:00 Jay D >:

Cómo mierdas me  borró de esta. Lista??¿???




-- 
-- 
		

Guido Barosio
https://about.me/gbarosio








--
Cumprimentos
jchavez
linux User #397972 on http://counter.li.org/




Re: tamaño de registro en Base de datos

2017-09-04 Thread Stephen Amell

Hola Jose,

¿El campo de la imagen es bytea?

Podría ser where length(campobytea) > 5000 o bien octet_length

Mira por aca: 
https://www.postgresql.org/docs/current/static/functions-binarystring.htm


Stephen,

On 2017-09-04 13:36, jvenegasperu . wrote:

Hola todos buen dia

Tengo una base de datos donde los usuarios ingresan fotografias con 
smartphones y en algunos casos las fotos pesan 4 o 5 Megas pero en 
realidad es suficiente con la misma foto pero mas pequeña. digamos de 
unos 400 KB. y no es funcional pedirles a los usuarios que usen una 
configuracion mas baja y no tengo acceso a la aplicacion de donde se 
recibe la información, asi que en este caso lo que hago es barrer 
periodicamente la base de datos extrayendo la foto de la base de datos 
redimensionandola y volviendo a guardar la imagen actualizando el 
campo en la BD hasta ahi todo bien.


Pero hace unos dias la actividad programada dejo de funcionar por un 
tema de permisos que ya se han restablecido pero me nace la pregunta 
como puedo saber en postgres cuanto pesa un registro o un campo de la 
base de datos. asi podria verificar en que numero de registro se queda 
la actualización del campo imagen y continuar a partir de ahi.


Es posible efectuar algo como select numero_registro from tabla where 
campo_imagen > tamanio_imagen? con alguna función o alguna idea de 
como se podria hacer esto? el campo_imagen es un campo de tipo blob.


saludos y gracias por las soluciones o comentarios que puedan brindarme

Atte

--
José Mercedes Venegas Acevedo
cel Mov RPC 964185205

Member of the PHP Documentation Group (Spanish)




Re: Descargar Postgres 9.6.2

2017-08-25 Thread Stephen Amell

Mil Gracias Jaime

No conocía la opción del Yum showduplicates.
Termine re compilando. Quería estar seguro de que no estaban mas publicados.

La necesidad de tener el 9.6.2, es que tengo un cliente productivo en 
esa versión y me pidieron un nuevo servidor donde probar en paralelo.


Creo que necesito una mediateca ;P


On 2017-08-24 16:53, Jaime Casanova wrote:

2017-08-24 14:18 GMT-05:00 Stephen Amell <stephenam...@inbox.lv>:

Hola lista, ¿como están?

Estoy necesitando descargar el Postgres 9.6.2 para Centos 7 de 64 bits y
solo me encuentro con el 9.6.4...


y por qué no te sirve 9.6.4?


¿Alguien seria tan amable de pasarme el link de descarga?


ejecutando "yum --showduplicates list postgresql96-server" veo que ya
no está disponible vía yum
si quieres esa versión especifica posiblemente debas recompilar...

pero la pregunta sigue siendo, por qué esa versión?





Descargar Postgres 9.6.2

2017-08-24 Thread Stephen Amell

Hola lista, ¿como están?

Estoy necesitando descargar el Postgres 9.6.2 para Centos 7 de 64 bits y 
solo me encuentro con el 9.6.4...


¿Alguien seria tan amable de pasarme el link de descarga?

Desde ya,
Muchas gracias!



Re: Replicación Hot Standby

2017-08-22 Thread Stephen Amell
Yo uso Repmgr (repmgr.org) y va como loco, a la hora de monitorear, 
entre sus tablas hay un campo que te dice el LAG entre los nodos, si es 
mas de 1 min... alertat!



On 2017-08-22 15:54, mauricio pullabuestan wrote:

Buen día




Estoy probando replicación, para ello tengo 2 maquinas virtuales con Ubuntu 
server 16.04 y Postgres 9.6, me apoye en este link


https://www.howtoforge.com/tutorial/how-to-set-up-master-slave-replication-for-postgresql-96-on-ubuntu-1604/



Por las pruebas que hice funciona sin problemas.



Postgres 9.6 tiene varias formas de replicar.

Que tipo replicación recomiendan para este ambiente de trabajo.


Servidor Maestro

Servidor HP proliant DL160 gen9, 32 gb memoria, 1 procesador xeon 1.6, 2 discos 
(no tengo la velocidad)

Ubuntu Server 16.04, Postgresql 9.6



Servidor Esclavo

Servidor HP proliant ML110 gen9, 32 gb memoria, 1 procesador xeon 3.5, 2 discos 
(no tengo la velocidad)

Ubuntu Server 16.04, Postgresql 9.6


Usuarios concurrentes 40 a 50

Insert 8 a 9 al día

Update 4 al día

Base de datos aproximadamente 20 gb.

La configuración de Postgres no tiene nada especial.


Que software puedo utilizar para monitorear que la replicación este trabajando?

En la replicación Hot Standby el servidor esclavo es solo de lectura, si por 
alguna razón el servidor Maestro se cae, como puedo promover el servidor 
esclavo para lectura escritura?

Gracias por su ayuda.
Mauricio