Re: [pgsql-es-ayuda] Substring y expresiones regulares
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 Olarteescribió: > 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
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
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 Olarteescribió: > 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
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
- 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 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
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 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
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
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
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