Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Hellmuth Vargas
Hola Lista

Si no debe tener los puntos:

select 'abcfd 333 nnn DNI: 623663.99.99.9090 ldsklñdskñdksfmdlkffjdfd' as
dato,
replace(split_part(trim(split_part('abcfd 333 nnn DNI: 623663.99.99.9090
ldsklñdskñdksfmdlkffjdfd','DNI:',2)),' ',1),'.','') as resultado;

  dato|resultado
---+---
 abcfd 333 nnn DNI: 623663.99.99.9090 ldsklñdskñdksfmdlkffjdfd |
6236639090


Hola Francisco: no es apenas lógico que tendemos a resolver los
requerimientos con lo que mas dominamos y eso es lo enriquecedor de estas
listas de correo: que  podemos  obtener diferentes perspectivas para dar
solución a un requerimiento... 


El 23 de marzo de 2017, 13:24, Francisco Olarte
escribió:

> Hellmuth:
>
> 2017-03-23 19:20 GMT+01:00 Hellmuth Vargas :
> > SELECT  'abcfd 333 nnn DNI: 623663.99.99.9090 ldsklñdskñdksfmdlkffjdfd'
> as
> > dato,
> > split_part(trim(split_part('abcfd 333 nnn DNI: 623663.99.99.9090
> > ldsklñdskñdksfmdlkffjdfd','DNI:',2)),' ',1) as resultado
>
> Nice. Reconozco que tras 30 años de perl tiendo a abusar de las regexp
> ( como valen pa tantas cosas nunca memorizo el resto de las funciones
> un pelin avanzadas que se pueden sustituir por ellas ), pero para la
> especificacion del problema es mas directo ( y con un trim o replace o
> algo asi seguro que se le pueden eliminar los puntos ).
>
> Francisco Olarte.
>




-- 
Cordialmente,

Ing. Hellmuth I. Vargas S.


Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Francisco Olarte
Hellmuth:

2017-03-23 19:20 GMT+01:00 Hellmuth Vargas :
> SELECT  'abcfd 333 nnn DNI: 623663.99.99.9090 ldsklñdskñdksfmdlkffjdfd' as
> dato,
> split_part(trim(split_part('abcfd 333 nnn DNI: 623663.99.99.9090
> ldsklñdskñdksfmdlkffjdfd','DNI:',2)),' ',1) as resultado

Nice. Reconozco que tras 30 años de perl tiendo a abusar de las regexp
( como valen pa tantas cosas nunca memorizo el resto de las funciones
un pelin avanzadas que se pueden sustituir por ellas ), pero para la
especificacion del problema es mas directo ( y con un trim o replace o
algo asi seguro que se le pueden eliminar los puntos ).

Francisco Olarte.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Hellmuth Vargas
Hola Lista

SELECT  'abcfd 333 nnn DNI: 623663.99.99.9090 ldsklñdskñdksfmdlkffjdfd' as
dato,
split_part(trim(split_part('abcfd 333 nnn DNI: 623663.99.99.9090
ldsklñdskñdksfmdlkffjdfd','DNI:',2)),' ',1) as resultado

--

   dato|resultado
---+---
 abcfd 333 nnn DNI: 623663.99.99.9090 ldsklñdskñdksfmdlkffjdfd |
623663.99.99.9090






El 23 de marzo de 2017, 13:16, Francisco Olarte
escribió:

> Gerardo:
>
> 2017-03-23 17:57 GMT+01:00 Gerardo Herzig :
> >> Buenos dias
> >> Necesito extraer de un campo de texto los nros de DNI contenidos en
> >> él.
> >> Sé que los mismos se encuentran luego de la cadena 'DNI:'
> >>
> >> Con substring(texto from 'DNI:') ubico la cadena
> ...
>
> > Que tal una expresion regular para borrar todo lo que *no* sean numeros:
>
> Eso te vale si solo esta el dni, pero...
>
> >
> > select regexp_replace(texto, '[^0-9]', '','g') from tabla;
>
> > postgres=# select *, regexp_replace(dni, '[^0-9]', '','g') as
> solo_numeros from dnis;
> > dni | solo_numeros
> > +--
> >  DNI:12.382.712 | 12382712
> >  DNI:12382712   | 12382712
> >  DNI:123827..12 | 12382712
> > (3 rows)
> -- Que pasa si meto esto delante del select?
> copy dnis(dni) from stdin;
> Numero de telefono: 666
> DNI: desconocido, TEL: 12345678
> Tel: 6 DNI: 12345678 Direccion: Avda. Pensilvania 1600
> 44100 = 2*2*3*3*5*5*7*7, tricky uh?
> \.
> -- Lo digo porque si tiene que buscar DNI: me extraña que la columna
> sea simplemente "los digitos del dni con alguna cosa mas".
>
> Francisco Olarte:
>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org
> )
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>



-- 
Cordialmente,

Ing. Hellmuth I. Vargas S.


Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Francisco Olarte
Gerardo:

2017-03-23 17:57 GMT+01:00 Gerardo Herzig :
>> Buenos dias
>> Necesito extraer de un campo de texto los nros de DNI contenidos en
>> él.
>> Sé que los mismos se encuentran luego de la cadena 'DNI:'
>>
>> Con substring(texto from 'DNI:') ubico la cadena
...

> Que tal una expresion regular para borrar todo lo que *no* sean numeros:

Eso te vale si solo esta el dni, pero...

>
> select regexp_replace(texto, '[^0-9]', '','g') from tabla;

> postgres=# select *, regexp_replace(dni, '[^0-9]', '','g') as solo_numeros 
> from dnis;
> dni | solo_numeros
> +--
>  DNI:12.382.712 | 12382712
>  DNI:12382712   | 12382712
>  DNI:123827..12 | 12382712
> (3 rows)
-- Que pasa si meto esto delante del select?
copy dnis(dni) from stdin;
Numero de telefono: 666
DNI: desconocido, TEL: 12345678
Tel: 6 DNI: 12345678 Direccion: Avda. Pensilvania 1600
44100 = 2*2*3*3*5*5*7*7, tricky uh?
\.
-- Lo digo porque si tiene que buscar DNI: me extraña que la columna
sea simplemente "los digitos del dni con alguna cosa mas".

Francisco Olarte:

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Gerardo Herzig
- Mensaje original -
> De: "baru gerardi" 
> Para: pgsql-es-ayuda@postgresql.org
> Enviados: Jueves, 23 de Marzo 2017 13:13:29
> Asunto: [pgsql-es-ayuda] Substring y expresiones regulares
> 
> 
> 
> 
> 
> 
> 
> Buenos dias
> Necesito extraer de un campo de texto los nros de DNI contenidos en
> él.
> Sé que los mismos se encuentran luego de la cadena 'DNI:'
> 
> Con substring(texto from 'DNI:') ubico la cadena
> 
> pero necesito que liste de ahí en adelante los nros que encuentre,
> teniendo en cuenta:
> 1. que desconozco cuantos espacios hay entre 'DNI:' y el primer
> dígito y
> 2. que puede haber puntos entre los dígitos
> 
> 
> Desde ya, gracias por la ayuda


Que tal una expresion regular para borrar todo lo que *no* sean numeros:

select regexp_replace(texto, '[^0-9]', '','g') from tabla;

postgres=# select *, regexp_replace(dni, '[^0-9]', '','g') as solo_numeros from 
dnis;
dni | solo_numeros 
+--
 DNI:12.382.712 | 12382712
 DNI:12382712   | 12382712
 DNI:123827..12 | 12382712
(3 rows)


HTH

Gerardo

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Francisco Olarte
2017-03-23 17:13 GMT+01:00 baru gerardi :
> Buenos dias
> Necesito extraer de un campo de texto los nros de DNI contenidos en él.
> Sé que los mismos se encuentran luego de la cadena 'DNI:'
> Con substring(texto from 'DNI:') ubico la cadena
> pero necesito que liste de ahí en adelante los nros que encuentre, teniendo
> en cuenta:
> 1. que desconozco cuantos espacios hay entre 'DNI:' y el primer dígito y
> 2. que puede haber puntos entre los dígitos

Esa es la tipica tarea para expresiones regulares.

Por desgracia tambien es un problema poco especificado.

Suponiendo que lo que quieres es buscar -
  - "DNI:"
  - seguido por un numero indeterminado de espacios.
  - seguido por una cadena de digitos que puede tener puntos de
separacion en medio.
( y no dices nada de la letra, si son españoles ultimamante la tienen )

Solo con lo de los digitos y puntos:

select x, regexp_matches(x, 'DNI:\s*(\d+(?:\.\d+)*)') from
regexp_split_to_table('malo/xx DNI: 12 22/yy DNI:12.22.33 zz','/') as
t(x);
 x  | regexp_matches
+
 xx DNI: 12 22  | {12}
 yy DNI:12.22.33 zz | {12.22.33}
(2 rows)

Que puede ser lo que quieres o no, pero de ahi puedes elaborar. En la
regexp que hay tenemos, por partes:

DNI: - busca eso
\s* un numero indeterminado (*) de espacios.
( capturamos
\d+ uno o mas (+) digitos (\d) opcionales
(?: mas una sub-secuencia compuesta por
   \. Un punto ( el punto a secas es un comodin )
   \d+ y digitos
)* fin de subsecuencia, repetida un numero indeterminado de veces.
) fin de captura.

Francisco Olarte.



>
> Desde ya, gracias por la ayuda
> Saludos
> Baru
>
>
>
> --
> lo que está y no se usa nos fulminará

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema Anthony Sotolongo

Hola, te comento entre lineas


On 23/03/17 13:13, baru gerardi wrote:

Buenos dias
Necesito extraer de un campo de texto los nros de DNI contenidos en él.
Sé que los mismos se encuentran luego de la cadena 'DNI:'
Con substring(texto from 'DNI:') ubico la cadena
pero necesito que liste de ahí en adelante los nros que encuentre, 
teniendo en cuenta:

1. que desconozco cuantos espacios hay entre 'DNI:' y el primer dígito y

los puedes eliminar con las funciones  trim y familia

2. que puede haber puntos entre los dígitos

aquí puedes usar replace por ''


de todos modos sigue indagando con las funciones de string y con la 
combinación de algunas de ellas podrás lograr lo que necesitas : 
https://www.postgresql.org/docs/9.6/static/functions-string.html



saludos


Desde ya, gracias por la ayuda
Saludos
Baru



--
lo que está y no se usa nos fulminará




Re: [pgsql-es-ayuda] problemas con el recolector de estadisticas

2017-03-23 Por tema Francisco Olarte
2017-03-23 11:54 GMT+01:00 Kernel :
> mi base de datos ha empezado a ralentizarse, en los log apararece los
> siguente :
> usando estadadisticas viejas en vez de actualizadas porque el recolector de
> estadisticas no esta respondiendo
> Agradeceria cualquier tipo de ayuda

Asi de cara parece como que se te ha parado el autovacuum, que es el
proceso que se encarga de hacerlo, lo cual te podria provocar bastante
ralentizacion especialmente si tienes claves autoincrementadas, o
timestamps de eventos actuales, en tus queries ( ya que si, p.e., se
para en febrero y preguntas por marzo supondra que no hay datos, y
usara un plan correcto pero potencialmente muy malo si hay registros
de marzo , o si se paro en el ID 1000 y preguntas por ID 1500 a 2000).

De todas formas sospecho que lo que has puesto no es el contenido
original del log ( mas que otra cosa por la falta de ortografia en
esta*da*disticas, cuando 10 palabras mas alla esta bien escria ). Si
es asi podrias poner el log original ( con el que se puede intentar
ver cual es la causa. Yo personalmente solo uso postgres en ingles,
con doc en ingles, con un log que se correcto puedo buscar el original
y mirar algo de las docs, pero con ese ni lo voy a intentar ).

Francisco Olarte.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


[pgsql-es-ayuda] Substring y expresiones regulares

2017-03-23 Por tema baru gerardi
Buenos dias
Necesito extraer de un campo de texto los nros de DNI contenidos en él.
Sé que los mismos se encuentran luego de la cadena 'DNI:'
Con substring(texto from 'DNI:') ubico la cadena
pero necesito que liste de ahí en adelante los nros que encuentre, teniendo
en cuenta:
1. que desconozco cuantos espacios hay entre 'DNI:' y el primer dígito y
2. que puede haber puntos entre los dígitos

Desde ya, gracias por la ayuda
Saludos
Baru



-- 
lo que está y no se usa nos fulminará


[pgsql-es-ayuda] problemas con el recolector de estadisticas

2017-03-23 Por tema Kernel


Hola,
mi base de datos ha empezado a ralentizarse, en los log apararece los 
siguente :


usando estadadisticas viejas en vez de actualizadas porque el recolector 
de estadisticas no esta respondiendo



Agradeceria cualquier tipo de ayuda

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] migracion de versiones

2017-03-23 Por tema Francisco Olarte
Maria Antonieta:

2017-03-23 0:35 GMT+01:00 Maria Antonieta Ramirez :
> Me interesa la parte de como restaurar por partes, me pueden decir donde
> puedo leer mas acerca de esto, para aprender a hacerlo porfavor.

Primero, tu uso del top posting, especialmente con un mensaje
cualqueira como origen, hace casi imposible saber a que parte del hilo
te refieres.

En cuanto a localizacion de info, todo lo que te digo viene
documentado en las paginas del pg_dump/pg_restore, que estan dentro de
"postgresql client applications" en el manual.

Dicho esto, yo recuerdo haber dicho algo de restaurar por partes. Me
explico un poco mas.

Cuando haces un backup (con pg_dump) de una instancia de postgres al
restaurarla lo que haces es basicamente ejecutar un script SQL
gigante.

El pg_dump sin parametros, en formato texto, lo que hace es montarte
directamente ese script. Las unicas ventajas que (IMO) tiene ese
metodo es que se puede comprimir algo mas ( aunque yo jamas he
encontrado un caso en el que mereciese la pena por eso ) y que puede
contener en un solo archivo varias bases de datos y las definiciones
globales ( usuarios y roles ) del servidor.

Cuando yo tengo que hacer una migracion lo que hago es primero volcar
en formato texto las variables globales ( pg_dumpall -g, como te
indicaba Jaime ). Esto te da un script SQL pequeño que es facil de
arreglar si tienes que cambiar algo aprovechando la migracion o
arreglar algo por diferencias extremas de versiones.

Tras ello vuelco cada base de datos en formato custom, pg_dump -Fc.
Este formato es similar a un tar con elementos comprimidos en el
interior, o a un zip, pero especifico para postgres. Este formato te
hace lo mismo que el de texto, ya que un pg_restore sin mas de un dump
te da el mismo script sql que un pg_dump a script.

Pero el pg_restore puede hacer mas cosas. Una de ellas es conectar a
la BD que le digas y mandar el sql alli sin pasar por disco,
evidentemente. Otra es listarte lo que hay dentro del backup (
pg_restore -l ) que es lo que yo uso para restaurar por partes. Esa
opcion te da un listado comentado de lo que hay dentro del arhivo en
el orden en que lo va a procesar. Es como un script de control de
restauracion. La cosa es que ese listado lo puedes mandar con la
opcion -L de vuelta al pg_restore, lo que no es muy interesante. Pero
tambien puedes editarlo, trozearlo, reordenarlo o borrar cachos y
usarlos despues.

Yo he usado eso, p.e., para resolver un problema de roles. El backup
iba bien hasta que llegaba a una tabla que tenia un problema de
encodings, si no recuerdo mal. Lo que hacia era partir la lista del -l
en dos cachos, ejecutar el primero, pasar un pequeño trozo de sql que
hice para arreglar las cosas y despues pasar el segundo.

Tambien lo he usado para reordenar un par de tablas. Primero
restauraba ese par de tablas en un server auxiliar y las reorganizaba
y hacia un backup de esas dos. Luego editaba el listado para restaurar
hasta esas tablas del original, en medio restauraba las tablas
reorganizadas de la copia, y detras restauraba lo que venia detras de
las tablas originales.

Y otra cosa para lo que lo uso mucho es para las particiones. Nosotros
tenemos mucho dato en tablas particionadas por fechas ( de insercion
mas o menos ). Cuando restauro una de estas puedo editar el listado
para restaurar las tablas maestras de las particiones y la particion
actual, poner el sistema en servicio ( degradado por que no se puede
consultar el historico, pero es util ) y despues voy restaurando las
particiones de historico ( de hecho uno de los tipos de
reorganizaciones que he hecho como te contaba arriba es particionar
tablas que no lo estaban ).

Basicamente lo de ir por partes es parecido a editar el archivo sql
gigante, pero mas comodo cuando el volumen de datos es grande.

Francisco Olarte.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda