[pgsql-es-ayuda] Re: [pgsql-es-ayuda] Índices sobre constraints foreign key
Ivan: 2017-06-10 3:33 GMT+02:00 Ivan Perales M. <ivan.pera...@gmail.com>: > En algun momento del pasado, honestamente no recuerdo si leí o escuché que > postgres por default creaba indices sobre las columnas que tienen un > constraint foreign key. Ya que el rendimiento siempre ha sido óptimo y no > he tenido problemas, realmente no me habia dado a la tarea de investigar al > respecto. > > Sin embargo acabo de leer un comentario que dice que ningun rdbms crea > indices sobre éstas columnas por que lo que uno debe crearlos si es > necesario. Muchos RDBMS crean indices para PK porque PK implica not-null, unique, y muchos implementan unique creando un indice unico. Por otro lado FK no implica UNIQUE, y no necesita indice en general, se chequea de hecho rapido con el indice de la PK. Solo si vas a hacer muchas referencias por el campo ( teniendo en cuenta las implicitas, como p.e. borrados en la pk ) le hace falta, y aun asi hay veces que un indice por FK puro no te interesa ( puedes tener p.e. un combo FK+timestamp que te interese mas). Recuerda ademas que los indices no son gratis. Ahora, lo de que ninguno lo cree parece muy atrevido, pero bueno, el que lo pusiera sabra. 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] Re: [pgsql-es-ayuda] calculo preciso de años meses y dias
Estimado Felix: Añado la lista en CC que no iba en tu mensaje original. 2017-05-16 13:18 GMT+02:00 felix gonzales <jfgonza...@gmail.com>: > Estimado Francisco > de manera "manual", me refiero a mirar un calendario (por ejemplo del > sistema operativo o el que tienes pegado en la pared) y contar los meses y > días entre dos fechas. por ejemplo del 15-02-2017 al 01-05-2017. Desde el 15 > de febrero hasta el 15 de abril tenemos 2 meses y del 16 de abril al 01 de > mayo hay 16 días. resultado final: 2 meses y 16 días. La parte de mirar el calendario la dabamos por echa. La parte de contar tambien. El data point que nos das nos dice que en parte lo quires hacer contando hacia adelante, hasta ahi bien. Ahora solo nos falta que nos digas que hay que hace cuando sobran dias, p.e. que hay que hacer cuando vas del 30 de enero al 13 de marzo. El 30 de febrero no existe, luego que haces en ese caso, cuentas dos dias para ir al 1 de febrero mas 28 para ir al 1 de marzo mas 13 extra para llegar al 13 de marzo, dandote 43 dias, o cuentas un mes para ir del penultimo dia de enero al penultimo ( 27 ) de febrero, mas 1 dia para terminar febrero mas 13 dias para llegar al 13 de marzo dando un toal de 1 mes y 14 dias, o cuentas 1 mes para ir del 30 de enero al 30 de febrero = 2 de marzo mas 11 dias para llegar a 1 mes y 11 dias? A lo que voy, y parece que no consigo que me entiendas, es a que si describes adecuadamente un proceso manual quizas te podamos decir como automatizarlo, pero si te limitas a dar un datapoint de "En este caso concreto que me da 2m16d querria 2m16d" poco podemos hacer. Incluso con la descripcion algo, aunque no mucho, mas prolija que has dado siguen quedando muchos casos que no se sabe que hacer con ellos. De hecho dudo mucho que tu hayas pensado en como hacerlo a mano. Es un problema clasico con las rutinas de fechas. Sale algo que no te gusta, parece que lo hace mal y que la forma correcta es "evidente" hasta que empiezas a rascar y ves que no lo es tanto. Por eso los que llevamos muchos años con estas cosas no decimos "la forma manual evidente", lo intentamos en el pasado repetidas veces y sabemos que no existe. Saludos 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] Re: [pgsql-es-ayuda] calculo preciso de años meses y dias
Felix: 2017-05-15 15:16 GMT+02:00 felix gonzales <jfgonza...@gmail.com>: > Necesito obtener años meses y días precisos. utilizando la función AGE tengo > la dificultad que la primera y ultima linea me devuelve lo mismo, alguna > alternativa? Dejando aparte algunas cosas que ya te han dicho, puedes definir "años meses y dias precisos". > select AGE('29-04-2017','15-02-2017'); > select AGE('30-04-2017','15-02-2017'); > select AGE('01-05-2017','15-02-2017'); > cualquier comentario bienvenido. Tu problema es el clasico cuando usas intervalos (age). El sistema intenta ser de utilidad separandote años/meses y dias, pero como los meses no son todos iguales te pasa eso. Si eres capaz de dar una definicion exacta de lo que quieres igual se te puede dar una solucion. Eso si, la definicion suele ser mucho mas dificil de dar de lo que parece, yo no me fiaria de ninguna de menos de un par de folios en tu caso. Porque postgres cree que te esta dando meses y dias precisos en ese caso, y probablemente para su definision lo son. 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] Duda sobre varias consultas simultaneas
Ligeramente fuera de contexto pero. On Thu, May 11, 2017 at 10:49 PM, Maximiliano Riffo <maxrif...@gmail.com> wrote: > where tiempobajada::timestamp::time between '08:00:00' and '09:00:00' and Un timestamp, o u time, es conceptualmente un numero real ( una distancia a un instante de tiempo fijo, p.e. ). Between da intervalos cerrados. Los intervalos cerrados no suelen combinar bien con los numeros reales porque es imposible cubrir la recta SIN sobreposicion con ellos. No parece que cree el problema tuyo en este caso, pero en general suele ser mejor usar time <= '08:00:00' and time < '09:00:00'. ( Esto da tipos de errores similares, pero no parecen los tuyos, p.e. si tienes un punto cada minuto exacto y usas ese tipo de codigo para contar te puedes encontrar que tienes 1441 puntos en un dia, pero 61 puntos por hora, que sumados te dan 1464, porque cuentas los extremos varias veces ) ( Y la respuesta a 'ya, pero nunca voy a tener :00.00' exacto suele ser que te ocurre a la primera ejecucion o a la demo con el cliente ) 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] retornar valor en transaccion
Marco, copio de nuevo a la lista, con todo el texto, por si alguien esta siguiendo el thread. Recuerda, reply to all. 2017-04-18 19:08 GMT+02:00 Marco Vinicio Jimenez Rojas <vinici...@gmail.com>: > vieras que interesante, ya probé con el .executeQuery, justamente pensé que > eso podría ser el problema pero, no me cambio nada, > Lo que observo es que es que cuando hago la consulta en el Query del pgAdmin > cuando retorna valores me dice: > 35 rows retrieved. en la la consola de mensajes y en data output muestra las > filas de las de la consulta. > Pero con la transacción en cuestión dice: > "query result with 2 rows discarded." en la consola de mensaje y el Data > Output no aparece nada. ESA es precisamente la razon por la que te debes aprender a manejar el psql de linea de comando y a copiar/pegar desde las ventanas de comando de tu SO ( Que no se cual es, pero temo windows ). El PGADMIN es un programa EXTREMADAMENTE COMPLEJO que hace sus cosas apartes y que muchos no usamos ni conocemos, y al ser grafico las interacciones son muy dificiles de describir. Esto tiene toda la pinta de que estas mandando varios comandos. No se como va el pgadmin, pero creo recordar que salvo que lo configures de alguna forma rara el se encarga de mandarte los begin end etc.. > Siento que eso tiene que ver en el porque no tengo resultado tampoco en > java. ¿ No estaras mandando en el "String sql" que pasas a al statement el texto "begin transaction" y "commit/rollback" ? ( SI es asi eso NO SE HACE ). Haz una prueba CON EL PSQL mandando SOLO EL QUERY DEL INSERT, y mira que te da ( y pega la sesion si no es lo que esperas, manda el query, si no te funciona pega DESDE QUE ENTRAS HASTA EL FINAL. Al ser el psql mas sencillo es mas facil ver que te esta pasando, pero todo esto tiene pinta de problemas con las herramientas. No tengo ni idea de como delinea las transacciones el pg-admin, pero el jdbc si que se que las delinea 'modo oracle', es decir, si esta en autocommit cada comando en una transaccion, si no todo en una transaccion hasta que llamas a connection.commit() o .rollback() ). Francisco Olarte. P.S. A mi personalmente me gusta mas el modo por defecto del PSQL, estas en autocommit hasta que mandas begin, porque te permite cambiar facilmente el modo de transaccionar, pero que se le va a hacer. - 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] retornar valor en transaccion
Marco: 2017-04-18 15:45 GMT+02:00 Marco Vinicio Jimenez Rojas <vinici...@gmail.com>: > Disculpa con lo del correo, gmail me lo oculta y entonces no me doy cuenta. Sin problema. En otro orden de cosas, acuerdate que el reply-to de las listas de postgres, por motivos historicos, apunta al emisor, con lo que hay que darle al reply-all en google ( no se como saldra si lo tienes en castellano, yo lo uso en ingles, la flecha curvada doble ). He reañadido la lista en copia y quoteare de mas para recuperar el contexto. > Tengo dos tablas, veamoslo como un encabezado y un detalle donde el detalle > una relación N-n, entonces, entonces quiero hacer todos los insert de manera > completa y por eso uso la transaccion. Lo del master-detail lo habia pillado. Lo de la transaccion es innecesario, ya que tu query es un solo comando, y eso va siempre en una sola transaccion ( puede haber varios comandos por transaccion, pero no al reves ). > en Java uso el JDBC, con un queryupdate AHI esta tu problema. Un insert-returning se comporta, como te dije en mis mensajes anteriores, como un select. > consultaSQL_TJ = conexionTJ.createStatement(); > consultaSQL_TJ.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); > ResultSet rs = consultaSQL_TJ.getGeneratedKeys(); > if(rs.next()) > { >res = rs.getInt(1); > } Este trozo es para cuando haces un insert SIN RETURNING y quieres que te de, p.e., los valores de los serial que no has puesto explicitos ( Yo personalmente no lo recomiendo, el returning te da mas control ). Lo que tienes que hacer es cambiar a hacer un execute sin mas, si mi jdbc no me falla no es mas que hacer: consultaSQL_TJ = conexionTJ.createStatement(); ResultSet rs =consultaSQL_TJ.executeQuery(sql); if(rs.next()) ... Y pon los nombres de columnas que insertas ( o, si los has puesto, copia los queries que usas, no los rehagas ). 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] retornar valor en transaccion
Marco: 2017-04-18 1:06 GMT+02:00 Marco Vinicio Jimenez Rojas <vinici...@gmail.com>: > Tengo la siguiente transacción en la cual necesito utilizar el valor del > "returning id_roles" fuera de la transacción. todo funciona bien pero no me > sale ese dato por ningún lado Cuando 'no te sale' que quieres decir? Eso parece un trozo de script medio pegado, si se lo metes al psql ¿ que hace / imprime ?. Nota, si estas usando algo tipo el pgAdmin este puede estar recibiendo el dato y no mostrarlo, pero para depurar esas cosas necesitarias contar exactamente la secuencia que usas y los programas y versiones ( el psql es mas sencillo para estos reports, lo arrancas, le pegas el query, imprimira algo, cortas el texto de la pantalla entera y lo pegas, por eso te lo digo ). > begin transaction; > with roles as( > insert INTO ovinos.roles VALUES(default,'prueba rol','el primer rol de > prueba',2) returning id_rol > ) > insert INTO ovinos.funciones_roles VALUES(4,(select roles.id_rol from > roles)), > (5,(select roles.id_rol from roles))returning id_roles; Parece correcto PERO no poner los nombres de las columnas en las que estas insertando es 1.- Pedir problemas a medio plazo y 2.- una dificultad añadida para que te digamos nada ya que no sabemos siquierea como se llaman las columnas en las tablas. Una prueba similar ( sin schemas ) me funciona sin problemas: http://sqlfiddle.com/#!15/92ae0/1/0 Y por el estilo del report esto tiene toda la pinta de ser problemas con la herramienta de queries que estas usando. > commit; > ROLLBACK TRANSACTION; ¿ Porque commit + rollback ? 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: [MASSMAIL]Re: [pgsql-es-ayuda] restriccion check
Gilberto: 2017-04-05 18:46 GMT+02:00 Gilberto Castillo <gilberto.casti...@etecsa.cu>: >>> 2017-04-05 16:46 GMT+02:00 Gilberto Castillo >>> <gilberto.casti...@etecsa.cu>: >>>>> 2017-04-05 16:22 GMT+02:00 Pedro PG <pedr...@outlook.com>: >>>>>> Lo que deseo es agregar una restriccion CHECK que solo permita >>>>>> modificar >>>>>> datos de la tupla si y solo si liquidado es NULL. >>>>> >>>>> Igual estoy un poco oxidado, pero las restricciones check lo que hacen >>>>> es comprobar un juego de valores de la tupla, no miran si vienen de >>>>> update o de lo que sea. >>>>> >>>>>> 1) Cuando se inserta un registro el campo liquidado siempre sera NULL >>>>>> (esto >>>>>> es correcto). >>>>>> 2) Desde un procedimiento externo actualizare liquidado (esto tambien >>>>>> es >>>>>> correcto). >>>>>> 3) Si deseo actualizar el registro, solo debe permitirme si el campo >>>>>> liquidado es NULL (aqui mi problema). >>>>> >>>>> Probablemente puedes hacer eso con un trigger. De todas formas, salvo >>>>> que estes haciendo el control con roles y mucho cuidado, porque no >>>>> pones un 'where liquidadoull' extra en los updates? Tambien podrias >>>>> probar con un "create rule x on update to table where OLD.liquidado is >>>>> not null instead do nothing' o algo asi, pero te puede dar problemas >>>>> si quieres revertir una fila a liquidadoull. Al fin y al cabo, si >>>>> alguien puede cambiar liquidado a null probablemente pueda hacer >>>>> not-null->null->update->null. >>>> >>>> Yo Usaría UPSERT >>> >>> Iluminanos, porfa. Hacer eso con upsert seria un truco fantastico. > > insert into mytabla as a (campo1, liquidado) > values ('valor1',1),('valor2',null) > on conflict (liquidado) > do update set > liquidado = a.liquidado + EXCLUDED.liquidado > where a.liquidado IS NULL; Te tomaste la molestia de leer un poco por encima lo que pedia? Suponiendo que asi fuera ( que yo personalmente creo que no pero siempre hay que otorgar el beneficio de la duda): 1.- Su problema es evitar updates, no inserts., lo pone en el punto 3. 2.- Y aunque no insertase siempre null, el campo de liquidado NO es unico. 3.- De hecho el punto 1 de la pregunta dice que insert SIEMPRE es null en insercion, lo que hace que NUNCA haya conflictos de insercion en liquidado. 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: [MASSMAIL]Re: [pgsql-es-ayuda] restriccion check
Gilberto: 2017-04-05 16:46 GMT+02:00 Gilberto Castillo <gilberto.casti...@etecsa.cu>: >> 2017-04-05 16:22 GMT+02:00 Pedro PG <pedr...@outlook.com>: >>> Lo que deseo es agregar una restriccion CHECK que solo permita modificar >>> datos de la tupla si y solo si liquidado es NULL. >> >> Igual estoy un poco oxidado, pero las restricciones check lo que hacen >> es comprobar un juego de valores de la tupla, no miran si vienen de >> update o de lo que sea. >> >>> 1) Cuando se inserta un registro el campo liquidado siempre sera NULL >>> (esto >>> es correcto). >>> 2) Desde un procedimiento externo actualizare liquidado (esto tambien es >>> correcto). >>> 3) Si deseo actualizar el registro, solo debe permitirme si el campo >>> liquidado es NULL (aqui mi problema). >> >> Probablemente puedes hacer eso con un trigger. De todas formas, salvo >> que estes haciendo el control con roles y mucho cuidado, porque no >> pones un 'where liquidado=null' extra en los updates? Tambien podrias >> probar con un "create rule x on update to table where OLD.liquidado is >> not null instead do nothing' o algo asi, pero te puede dar problemas >> si quieres revertir una fila a liquidado=null. Al fin y al cabo, si >> alguien puede cambiar liquidado a null probablemente pueda hacer >> not-null->null->update->null. > > Yo Usaría UPSERT Iluminanos, porfa. Hacer eso con upsert seria un truco fantastico. 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] restriccion check
Pedro: 2017-04-05 16:22 GMT+02:00 Pedro PG <pedr...@outlook.com>: > Lo que deseo es agregar una restriccion CHECK que solo permita modificar > datos de la tupla si y solo si liquidado es NULL. Igual estoy un poco oxidado, pero las restricciones check lo que hacen es comprobar un juego de valores de la tupla, no miran si vienen de update o de lo que sea. > 1) Cuando se inserta un registro el campo liquidado siempre sera NULL (esto > es correcto). > 2) Desde un procedimiento externo actualizare liquidado (esto tambien es > correcto). > 3) Si deseo actualizar el registro, solo debe permitirme si el campo > liquidado es NULL (aqui mi problema). Probablemente puedes hacer eso con un trigger. De todas formas, salvo que estes haciendo el control con roles y mucho cuidado, porque no pones un 'where liquidado=null' extra en los updates? Tambien podrias probar con un "create rule x on update to table where OLD.liquidado is not null instead do nothing' o algo asi, pero te puede dar problemas si quieres revertir una fila a liquidado=null. Al fin y al cabo, si alguien puede cambiar liquidado a null probablemente pueda hacer not-null->null->update->null. 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
Baru: 2017-03-24 14:12 GMT+01:00 baru gerardi <soyb...@gmail.com>: > Soy novato y miraré en detalle las respuestas para aprender. Mira tambien los manuales. Yo personalmente recomiendo el original, que es un ingles muy asequible sobre todo en la parte de referencias de funciones. > Si me permiten, una pregunta mas > Exista alguna manera dentro del substring como para posicionarme > en la cadena de texto con una subcadena y de ahi tomar un desplazamiento? > Disculpen el invento, pero imagino algo del tipo > substring(texto, 'DNI:', n) De ahi lo de leer el manual, en la pagina donde describe el substring te cuenta, justo debajo de la variante de substring con indices numericos: substring(string from pattern) text Extract substring matching POSIX regular expression. See Section 9.7 for more information on pattern matching. De ahi, viendo el ejemplo, puedes hacer substring(texto from 'DNI:.') ( con n puntos, o si lo prefieres mira los cuantificadores en la referencia de los pattern ). No solo eso, sino que justo encima del substring clasico con enteros (substring(string [from int] [for int]) tienes la function position(substring in string). De esas puedes sacar la solucion clasica para lo que quieres ( en muchos lenguajes no tienes la que quieres, pero tienes una que busca y otra que corta ). Vamos, divide et impera: $ select position('DNI:' in 'TEL:22 DNI:123456789 AGE:66'); position -- 8 (1 row) $ select substring('TEL:22 DNI:123456789 AGE:66' from position('DNI:' in 'TEL:22 DNI:123456789 AGE:66')+4 for 8); substring --- 12345678 (1 row) $ select substring('TEL:22 DNI:123456789 AGE:66' from position('DNI:' in 'TEL:22 DNI:123456789 AGE:66')+char_length('DNI:') for 8); substring --- 12345678 (1 row) ( La ultima es para que veas como podrias meterlo todo en una funcion ) > Algo asi de sencillo resolveria mi problema, que es muy básico Complicado no es, es mas o menos lo mismo que en los lenguajes mas normales. 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
Hellmuth: 2017-03-23 19:20 GMT+01:00 Hellmuth Vargas <hiv...@gmail.com>: > 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
Gerardo: 2017-03-23 17:57 GMT+01:00 Gerardo Herzig <gher...@fmed.uba.ar>: >> 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 17:13 GMT+01:00 baru gerardi <soyb...@gmail.com>: > 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] problemas con el recolector de estadisticas
2017-03-23 11:54 GMT+01:00 Kernel <jucab...@gmail.com>: > 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
Re: [pgsql-es-ayuda] migracion de versiones
Maria Antonieta: 2017-03-23 0:35 GMT+01:00 Maria Antonieta Ramirez <marami...@ulsaneza.edu.mx>: > 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
Re: [pgsql-es-ayuda] Consulta sobre Split
Buenas tardes: 2017-03-21 0:35 GMT+01:00 Mario Sileone (GM) <msile...@gmail.com>: > Tengo una consulta respecto a las tablas divididas. Tenemos una división > en tablas que tienen millones de registros diarios, en tablas heredadas > mensuales. De las que iria muy bien que pudieramos ver algo para saber como son. > Todo funciona de maravillas, salvo que, hemos notado que las consultas con > variables (between now() - interval '8 hours' AND now()) no hacen caso y > busca en todas las tablas heredadas. ... lo que puede tener varios motivos .. > Lo vimos en un explain con las variables y luego uno con las fechas > literales. ... explain que vendria bien pudiesemos ver. > La pregunta es, al margen que tenemos la solución mediante código, si existe > algun método o quizás un quote_literal que transforme la consulta a literal > o alguna manera para que el postgres la interprete como tal. Aparte de la solucion que ya te apuntan, construir la consulta con una funcion, los datos que te comento vendrian bien. Ten en cuenta que las funciones de timestamp WITH y WITHOUT timezone son truculentas, ya que muchas veces las funciones de conversion de una a otra son volatiles ( dependen del timezone de la conexion ), y mirando el explain se puede ver a veces como hay conversiones de tipo en un caso que no hay en otro. ( p.e. now() exige una conversion si usas timestamp without time zone en la tabla, pero '2017-03-24 12:34:56' no. Sin embargo con timezone ninguna lo necesita. Y si le pones zona a la constante lo puede necesitar. Por eso yo normalmente uso with-timezone pero tengo cuidado de poner las constantes con zona numerica explicita ( tipicamente UTC=+00 ) ). 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] Funcion Postgresql update a SQL SERVER
Ruben: 2017-03-20 6:20 GMT+01:00 Ruben avila galindo <ruben2...@gmail.com>: > Hola amigos queria saber si puedo hacer una funcion en PostgreSQL pero que > en la funcion actualize una BD de SQL SERVER. Divide et impera. Primero intenta modificar un SQL server desde cualquier parte de postgres. Yo para eso miraria de buscar los Foreign Data Wrappers sobre TDS que hay por ahi. Con eso puedes 'importar' una tabla de sql server y verla local en postgres. Entonces solo te queda hacer una funcion que actualize dos tablas en postgres. Eso si, > create function sp_actualizar_stock Ten en cuenta los disaster-recovery. Cuando manipulas dos BD a la vez sin un gestor de transacciones global tienes la posibilidad de que cuando haya problemas se te desincronizen, con lo que deberias tener un mecanismo para corregirlos. Lo digo concretamente por el nombre "stock", he tenido algun caso de sincronizar stocks en dos servidores y aunque era dificil ( has de tener el problema entre que el sistema hace commit en uno y el otro, la ventana es pequeña ) conseguia tener discrepancias ( que solucionaba pegando un barrido de las tablas de vez en cuando ). 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] migracion de versiones
2017-03-16 19:46 GMT+01:00 Maria Antonieta Ramirez <marami...@ulsaneza.edu.mx>: > Por medio del presente contacto a ustedes ... > Sin mas por el momento quedo a sus órdenes para cualquier duda o comentario. ( Su es tono quizas excesivamente 'formal' para este contexto. No pasa nada, es totalmente correcto, pero nos pone en la tesitura de si responder en uno similar o utilizar el tono mas relajado habitual en la lista. ) Dicho esto: > ya que deseo migrar una base de > datos en postgres que esta en una version vieja que aun no me dicen que > version es, la quieren pasar a una version del mismo manejador pero en una > version mas avanzada podria ser la 9.4 o 9.6. > Es una base muy grande , tampoco me han dado a conocer el tamaño de la > misma, Mi duda es si para esto necesito una herramienta de migración o > bastaria con subir un respaldo a la nueva estructura en la version mas > actual que decidan ocupar. Depende de lo que entienda por "respaldo". Si es una copia elaborada con "pg_dump" este es siempre un metodo valido ( recuerde que el respaldo debe hacerse con el pg_dump de la version mas moderna, ya que, p.e., pg_dump-9.6 sabe como volvar una BD de version 9.0 para luego poder restaurarla, pero pg_dump-9.0 no sabe que incluir para la version futura 9.6 ). Si es una copia de los archivos de datos depende de la version. Desde hace un tiempo exite un programa "pg_upgrade" capaz de actualizar un directorio de una version a otra, en ocasiones mucho mas rapido que un ciclo de dump+restore, lo mas facil para ver cual suele ser ir a la entrada de pg_upgrade en las docs de la ultima version y en la parte superior de la pagina hay links a todas las versiones anteriores. De todas formas conviene que se lea las "release notes" desde la version antigua a la nueva, para ver si existen problemas. Dicho esto, sobre todo si va a cambiar de servidor, yo le recomendaria un dump+restore, con el dump en formato custom ( -Fc ). El restore se puede acelerar mucho configurando adecuadamente el servidor ( p.e., como es una BD nueva no necesita crash recovery, por lo que se puede usar fsync=off, wal_level minimal y toda una serie de cosas para acelerarlo, nosotros lo acemos asi, tenemos un postgres.conf.fast_restore que ponemos en esos casos ). Ademas con ese formato se puede restaurar por partes ( lease la documentacion de las opciones de lista / tabla de contenidos , -l y relacionadas. Al pg_restore se le puede dar un archivo que le dice que partes ( y en que orden ) restaurar, asi como decirle que lo genere para toda la BD. Jugando con eso nosotros hemos conseguido restaurar algunas BD problematicas ( sacamos el archivo, lo partimos, y ejecutamos entre los trozos scripts SQL para arreglar problemas ). ). Atentamente. Francisco Olarte. > > > > > Gracias. > > - 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] Consulta DBLink
Alberto... Respecto al quoting y dblink, se me escapo el send antes de escribir que de hecho en el dblink hay unas funciones dblink_build_* que te pueden ayudar con tu problema. RTFM as usual. 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] Consulta DBLink
Alberto: 2017-03-18 5:02 GMT+01:00 Alberto Cardenas Cardenas <alberto.cardenas.c...@gmail.com>: De dblink no entiendo mucho, pero dado que estas llamando a una function... > SELECT * FROM dblink_exec('base_remota', 'insert into > public.temporary_test_table (columna) ' || SELECT nombre from curso.tabla1 > limit 1; || ' ) Mr da que el problema es que te has liado con la concatenacion de cadenas. Es decir el segundo argumento esta mal tecleado, el ; esta donde no debe, la ultima ' esta desapareada. Te sugeririria que empiezes con un select trim() poniendo el codigo de montar la consulta remota ahi ( trim o cualquier otra funcion inofensiva ) hasta que eso te funcione, y entonces pasar al dblink cuando ya sepas que la consulta esta bien montada. De hecho te va a costar, porque necesitas que se manden comillas en el valor ( si nombre es como parece un texto ) que pasas a dblink, con lo que necesitaras doblarlas al montarlo, de ahi que mejor lo hagas en dos fases. Yo en estos casos recomiendo una pequeña funcion en pgsql o similar para poder ir por pasos ( paso uno, sacar nombre, paso 2, DOBLAR las comiilas en el valor de nombre, paso 3 concatenar el valor de nombre con el resto del query. La ventaja es que probablemente encuentres funciones que te ayuden con cosas como las comillas si lees un poco la documentacion. 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] error
Maria Antonieta: 2017-02-10 18:20 GMT+01:00 Maria Antonieta Ramirez <marami...@ulsaneza.edu.mx>: > Por medio de la presente pido su ayuda para saber acerca de este mensaje que > me aparece... ( Imagen suprimida, hubiera estado bien tener el texto de error en texto )... > Sin mas por el momentoq quedo en espera de sus comentarios. Un poquito de jujel dice, en la primer hit para "winsock error 10061" (https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx) , que el error 10061 es el WSAECONNREFUSED: WSAECONNREFUSED 10061 Connection refused. No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running. Eso viene a decir que el host que recibe la conexion no tiene a nadie escuchando en ese puerto ( o que tiene algun firewall que lo simula ). Tipicamente ese te pasa cuando el servidor no esta arrancado o la cadena de conexion no tiene la direccion correcta del servidor sino la de otra maquina. Revisa bien todo eso. Francisco Olarte. > > > Gracias!!! - 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] Cadena con dos puntos
José: 2017-01-23 17:56 GMT+01:00 jvenegasperu . <jvenegasp...@gmail.com>: > Estoy revisando y resulta que php si estaba insertando correctamente la > información lo que pasaba es que pgAdmin cuando le haces un select * from > tabla solo muestra el primer renglon. y ni un indicador que el campo tiene > mas de uno entonces parecia que no se insertaba nada como dices caprichitos > de pgadmin. ... > Asi que todo bien solo tengo que limpiar el retorno de carro de la salida > del del ws y mirar la información con otro cliente que no me genere dudas > como pgAdmin Ferpecto. Yo, para mirar cosas, recomiendo siempre un fallback al psql que incluyen ( que, de hecho, es el unico que uso y llevo con el postgres desde antes de que fuera SQL ). Cuando estes mirando poco s registros usa '\pset expanded', que se ven muy bien. Y, si tienes dudas, tira de un \copy y metele un 'od -tc -tx1' al resultado ( o usa tu editor favorito con modo hex ) 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] Cadena con dos puntos
Buenos dias: 2017-01-23 16:24 GMT+01:00 jvenegasperu . <jvenegasp...@gmail.com>: > insert into > cdrs.errores_sunat > (faultcode,faultstring,invoice_type_code,s_num,ambiente,lado,metodo) > values ('.200',$$ Detalle: Failed to establish a backside > connection$$,'RA','FF14-1','beta',':Serve','getStatus'); La parte problematica al menos parece no dar problemas: n=> values ('.200',$$ Detalle: Failed to establish a backside connection$$,'RA','FF14-1','beta',':Serve','getStatus'); column1 | column2 | column3 | column4 | column5 | column6 | column7 -+-+-+-+-+-+--- .200| Detalle: Failed to establish a backside connection | RA | FF14-1 | beta| :Serve | getStatus (1 row) > 1.- Cuando intento guardar con pgadmin o php con el espacio en blanco al > inicio guarda todos los campos excepto este campo y no me devuelve ningun > error > 2.- Cuando quito el espacio al inicio de la cadena he intento guardar con > pgadmin si me guarda el campo Eso tiene toda la pinta de ser caprichitos de pgAdmin, no lo us nunca, pero es posible que si pones que version (de pgAdmin) usas ( ya que si no recuerdo mal acaban de sacar una nueva ) alguien te pueda ayudar. > 3.- Cuando quito el espacio al inicio de la cadena he intento guardar con > php solo me guarda "Detalle:" y se corta donde empieza los dos puntos Eso tiene toda la pinta de que el PHP te este usando, en su subsistema de base de datos, los : como marcador de campo a sustituir por nombre. No estoy familiarizado con el, pero en las docs estara y cosas como esas pasan en muchas API. En general, desde un programa, NUNCA uses una cadena con el query completo, usa sustituciones, cosas tipo execute('insert into cdrs.errores_sunat (faultcode,faultstring,invoice_type_code,s_num,ambiente,lado,metodo) values (?,?,?,?,?,?)', '.200', "Detalle: Failed to establish a backside connection", 'RA','FF14-1','beta',':Serve','getStatus') La sintaxis exacta variara con el lenguage / requester que uses, pero todos lo soportan, y ademas si tienes las cosas en variables como suele pasar es mucho mas comodo (execute($query, $v1, $v2, ), RTFM for details pero seguro que se puede ). > Quitar el espacio al inicio me supone menos espacio usado por el registro y > se soluciona con un trim. > Sin embargo desde php me corta la cadena hasta los dos puntos alguien me > podria indicar como podria grabar esa cadena incluido los dos puntos y me > queda la duda no se puede insertar en postgres una cadena que empieza con > espacio en blanco? Si que se puede, tu problema parece ser de los programas clientes que usas. Usando uno sencillito ( el psql que viene incluido ): n=> create temporary table t (v varchar); CREATE TABLE n=> insert into t values (' '), ($$ $$), (' $$ $$ '), ($$ ' ' $$); INSERT 0 4 n=> select '<'||v||'>', length(v) from t; ?column? | length ---+---- < > | 1 < > | 1 < $$ $$ > | 7 < ' ' > | 5 (4 rows) 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] ejecutar script linux con clave
Carlos: Reformateo un poco porque el top-posting hace dificil entenderse. >> 2017-01-04 16:20 GMT+01:00 Carlos Edward Grajales Marmolejo >> <cgraja...@colombiasoftware.net>: >> > Considero que si es un cron, y si este lo ejecuta el root de la maquina, >> > lo >> > mas rapido es usar el .pgpass, configurado en la carpeta del root, ahi >> > se >> > especifica el usuario, clave, puerto y host de comunicacion. De esa >> > manera * >> > no hay que hacer configuraciones adicionales. >> >> El .pgpass especifica el PASS para una combinacion ( con posibles >> comodines ) de host/usuario/bd/.. 2017-01-04 20:15 GMT+01:00 Carlos Edward Grajales Marmolejo <cgraja...@colombiasoftware.net>: > Yo uso el esquema del pgpass para hacer copias de seguridad, y otros > procesos automaticos que requieren de comunicacion a la base de datos via > Shell Como yo. > El formato del .pgpass es este: > hostname:port:database:username:password > La documentacion esta en esta ruta. > https://www.postgresql.org/docs/9.2/static/libpq-pgpass.html Exactamente lo que digo. > Asi es que es suficiente el .pgpass para realizar una comunicacion efectiva > via consola a postgres sin especificar la clave , ideal para un crontab que > use el shell o un psql -U x -h zz donde x y zz estarian > especificados en en el .pgpass Esos -U -h SON configuraciones adicionales. No tienen porque estar en el .pgpass, ya que, segun ponen en tu link: " Each of the first four fields can be a literal value, or *, which matches anything. " Lo que yo intentaba indiar es que para mantener la configuracion INCLUIDA EN EL SCRIPT al minimo se use el "service file", ya que es muy habitual tener un monton de scripts que usan los mismos parametros para host/port/db e incluso a veces user. Todo esto lo metes ahi, y en el pgpass metes la pass, que no se puede meter en el service file por problemas de seguridad ( de forma similar a como tienes el password/shadow en los unix ). Francisco Olarte. P.S.: A que es mas facil leer las cosas cuando van en orden, y ademas suprimo las cosas redundantes, como las copias de tu firma? FO - 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] ejecutar script linux con clave
Carlos: 2017-01-04 16:20 GMT+01:00 Carlos Edward Grajales Marmolejo <cgraja...@colombiasoftware.net>: > Considero que si es un cron, y si este lo ejecuta el root de la maquina, lo > mas rapido es usar el .pgpass, configurado en la carpeta del root, ahi se > especifica el usuario, clave, puerto y host de comunicacion. De esa manera > no hay que hacer configuraciones adicionales. El .pgpass especifica el PASS para una combinacion ( con posibles comodines ) de host/usuario/bd/.. Para especificar el host se usa el pg_service.conf ( https://www.postgresql.org/docs/9.6/static/libpq-pgservice.html ) , en donde se pone todos menos las pass ( y que no tiene porque estar protegido ). Una vez configurados los dos se selecciona el servicio por la variable de entorno PG_SERVICE o, alternativamente, poniendo service= como nombre de base de datos. Funciona muy bien. 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] Ayuda postgresql
Henry: 2016-12-09 15:44 GMT+01:00 Henry Anchante <hacat...@fedoraproject.org>: > Señores buenos días mi consulta es la siguiente, como voy a postgresql lo > bajo directo o hay que pagar una suscripción, o tengo que buscar un > proveedor que me de servicio. Te lo bajas de www.postgresql.org, mas o menos. Dependiendo de tu SO puede que haya versiones precompiladas, o que te lo instale directamente su gestor de paquetes ( tipico de las distros de Linux y similares ). Es totalmente libre y gratis, bajatelo y ya esta. Hay proveedores que te dan servicio si no quieres liarte a instalartelo, y algunas versiones con extras y demas. Y, si entiendes ingles, leete el manual aunque sea por encima que vale la pena ( no se decirte si hay versiones en español, siempre uso el original ). 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] Ayuda postgresql
2016-12-07 18:03 GMT+01:00 jvenegasperu . <jvenegasp...@gmail.com>: ... > te referies con budines porque para mi budin es un postre y ya me dio hambre > El 5 de diciembre de 2016, 18:04, Henry Anchante >> Hola amigos necesito saber como adquirir en Perú la bd o si existe alguien >> que quiera ver postgresql para un budines. Lo siento por el quote feo, pero es lo que pasa cuando la gente hace top posting. que se refiere a un bisnes ( business, seria, y si en España tenemos ASDF supongo que en Peru casi seguro que tambien ). ( y la doble transposicion tuya en referies, supongo que por refieres, es de ir rapido ). 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] Cambio en tipo de columna de varchar por text
UN poco liado, pero es lo que pasa cuando se hace bottom quoting 2016-11-02 19:23 GMT+01:00 Ivan Perales M. <ivan.pera...@gmail.com>: ... > ellas, ademas manejo varias schemas, por lo que potencialmente si habria > miles de alters, entonces si tendria que hacer un vacum a la tabla que > mencionas por seguridad. > 2016-10-30 9:14 GMT-06:00 Jaime Casanova <jaime.casan...@2ndquadrant.com>: ... >> el peor efecto que habrá es un update en pg_attribute por cada alter >> table (lo que significa un registro muerto por cada alter table) si >> son muchas tablas quizá un vacuum (normal no full) sobre pg_attribute >> cada tantas tablas pero esto solo si hablamos de miles de alter table. Aunque lo optimo puede ser deshabilitarlo, hacerlo manual durante el proceso y rehabilitarlo al final, recuerda que, salvo que lo hayas quitado, esta el autovacuum, que, si no recuerdo mal, tambien opera en las tablas de sistema ( con lo que aunque no te las deja igual de bien si que te las mantendra a raya ). 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] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [MASSMAIL] [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Guía para configuración óptima de Postrgesql
2016-10-26 19:46 GMT+02:00 Juan Manuel Acuña <gps...@gmail.com>: > Muchas gracias!!! el sitio está súper interesante. De la herramienta que > mencionas no la conozco, la voy a buscar, y si la encuentro la pongo por > acá. Antes de ejecutarlas y ponerlas verificad que son adecuadas para las versiones mas o menos recientes, ya que circulan cosas por ahi que estan totalmente obsoletas y que proporcionan consejos directamente dañinos. 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] Re: [pgsql-es-ayuda] Guía para configuración óptima de Postrgesql
Buenas tardes: 2016-10-25 16:44 GMT+02:00 Juan Manuel Acuña <gps...@gmail.com>: > Alguien me podrá recomendar alguna página o guía para optimizar la > configuración de Postgresql en un servidor linux Debian? Asi, con todos los detalles que das, poco mas que https://wiki.postgresql.org/wiki/Performance_Optimization y los capitulos relevantes del manual. Lo siento, todo en ingles, pero yo tiro siempre de la version original si puedo. 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] Convertir de integer a text
Ivan: 2016-10-21 23:07 GMT+02:00 Ivan Perales M. <ivan.pera...@gmail.com>: > Debo convertir una columna de tipo integer a tipo text por que se requieren > valores alfanuméricos, la base de datos actualmente tiene alrededor de 50 > mil registros. La pregunta es, si despues de convertirla debo ejecutar algun > tipo de proceso como para sanear el cambio? o lo hace el autovacuum que se > ejecuta diariamente? 50k registros no son demasiados, el autovacuum te deberia dejar las cosas ordenaditas. No obstante ese es el tipo de cambio que reescribe toda la tabla, con lo que tienes todos los boletos para que te queden muchos agujeros ( espacio libre en el archivo de la tabla, que se ira arreglando con el tiempo si hay modificaciones en la tabla con el autovacuum ) y dado que no es muy grande ( salvo que sean filas monstruosas ) es el tipico cambio que te puede interesar ejecutar desactivando el autovacuum de la tabla temporalmente y haciendo un vaccuum full manual ( algo como alter table set autovacuum_enabled=false, alter columna, vacuum full verbose analyze, set autovacuum_enabled true ) ya que de todas maneras tendras que programar una ventana de mantenimiento para cambiarla ( ademas el autovacuum en esa tabla no hara mucho mas que incordiarte durante el cambio ). 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] Cambiar motor de disco en Ubuntu
Manuel: 2016-10-18 17:10 GMT+02:00 Manuel Aller <manuel.al...@infracoop.com.ar>: > Los pasos para hacer la migración son: > 1. cambiar el archivo de configuración para que diga: > data_directory = '/database/pgdata' > 2. detener el servicio de postgres: > # sudo service postgresql stop Probablemente funciona sin problema, pero yo en general recomendaria siempre invertir esos pasos, no tocar nada con el servicio en marcha si lo vas a parar. > 3. hacer que el nuevo directorio sea del user postgres: > # sudo chown -R postgres.postgres /database/pgdata Salvo que lo hagas para minimo downtime, en cuyo caso esto deberia ir delante. > 4. mover los datos al nuevo directorio: > # mv /var/lib/postgresql/9.3/main /database/pgdata Y para hacer ese paso necesitaras estar corriendo como usuario postgres o root ( que con el nivel de detalle que lo cuentas conviene añadirlo por dejarlo completo del todo ). 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] Re: [pgsql-es-ayuda] Actualizar versión de PG
2016-10-11 19:15 GMT+02:00 Herman Estaban <hermanesta...@gmail.com>: > Hola a todos, tengo poco tiempo utilizando PG, instale la versión 9.5 y > quisiera actualizar a la ultima versión 9.6, que debo hacer? Decirle a tu encargado de actualizar Postgres 'Actualizame a la version 9.6.' Ahora en serio, dar algunos detalles de que te has instalado y como para que alguien familiar con la combinacion te pueda decir algo. Por lo que yo se, lo de arriba puede ser correcto. En general suele ser cuestion de ejecutar pg_upgrade, previo backup si los datos son importantes. O, si el servidor es pequeño, puede que mejor pg_dump/pg_restore si quieres reorganizar alguna cosilla, pero siendo nuevo lo dudo. La documentacion oficial cuenta como se hace todo, eso si, en Ingles ( no se si existe una version en castellano, yo habiendo una original en ingles siempre tiro de ella ). La unicas recomendaciones genericas que se me ocurren, haz los backups en -Fc de cada BD y uno de globales con el pg_dumpall, recuerda que siempre se hacen backups con la version mas reciente del pg_dump ( y que el pg_upgrade a usar es el mas reciente, si lo piensas es logico, los programas de la 9.6 saben como era la 9.5, los de la 9.5 ni sabian si iba a existir la 9.6 ). En resumen, repito, da detalles porque sino poco se te puede decir. 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] Cambiar motor de disco en Ubuntu
Buenas tardes: 2016-10-07 23:15 GMT+02:00 Electricos del Valle S.A. - Jose Fdo Donado E. <jfdon...@electrovalle.com>: > > Tengo instalado Postgresql en Ubuntu y quisiera pasar todo el motor a un > disco nuevo, me pueden indicar como se hace. Sin mas detalles como que sera imposible ayudarte. Necesitaras contar al menos que discos montas y en que puntos y en que directorios has metido las cosas de postgres, y ademas en Ubuntu creo que tienes la complejidad añadida de que usa los wrappers de Martin Pitt, que no es un postgres a secas. En general, cuando he hecho cosas similares en Linux lo mas seguro suele ser parar el server ( aprovechando que muchas veces tienes que hacerlo para instalar los discos nuevos ), copia del unico directorio en el que estan los datos y rearranque tras ajustar el .conf. O cuando he cambiado un disco de datos por uno nuevo montarlo en el path del anterior y copia. Pero vamos, sin saber como eran tus discos, como son ahora y donde estan los binarios y datos en tu instalacion, poco se puede decir. 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] campos timestamp
Hola Hellmuth... 2016-10-06 14:54 GMT+02:00 Hellmuth Vargas <hiv...@gmail.com>: > Hice el siguuiente ejercicio: > > select cast('1968-09-08 00:00:00+01' as timestamp) as fecha,cast('1900-01-01 > 10:00:00+00' as timestamp) as hora, cast('1968-09-08 00:00:00+01' as > timestamp)+cast(cast('1900-01-01 10:00:00+00' as timestamp) as time) as > fechahora Y el resultado fue? porque no lo tengo muy claro. Con las zonas p*t**ndo de por medio puede que no obtengas el mismo resultado siempre ( aqui utilizas TEXTO, eso es facil, no TSw/TZ, que es lo que pedia el ejemplo original ). Mira lo que pasa en mi maquina si cambio las constantes de texto a timestamp with time zone, como en el ejemplo original: n=> select cast('1968-09-08 00:00:00+01' as timestamp) as fecha,cast('1900-01-01 10:00:00+00' as timestamp) as hora, cast('1968-09-08 00:00:00+01' as timestamp)+cast(cast('1900-01-01 10:00:00+00' as timestamp) as time) as fechahora ; fecha|hora | fechahora -+-+- 1968-09-08 00:00:00 | 1900-01-01 10:00:00 | 1968-09-08 10:00:00 (1 row) n=> select cast('1968-09-08 00:00:00+01'::timestamp with time zone as timestamp) as fecha,cast('1900-01-01 10:00:00+00'::timestamp with time zone as timestamp) as hora, cast('1968-09-08 00:00:00+01'::timestamp with time zone as timestamp)+cast(cast('1900-01-01 10:00:00+00'::timestamp with time zone as timestamp) as time) as fechahora; fecha|hora | fechahora -+-+- 1968-09-08 00:00:00 | 1900-01-01 09:45:16 | 1968-09-08 09:45:16 (1 row) Siempre hay conversion de tipos, no hay que olvidar nunca que un TSw/TZ internamente no es un bonito texto y NO TIENE LA ZONA HORARIA ALMACENADA ( lo que es evidente si se miran los requisitos de almacenamiento, que son los mismos para w/ que wo/ TZ ). Internamente equivalente a un numero real gordo, un punto en la recta del tiempo. La diferencia es que cuando lo imprimes si es w/TZ el sistema lo imprime en la TIME ZONE activa en ese momento, mientras que si es WO/TZ te imprime el equivalente a la zona UTC. Por eso cuando se quieren guardar 'horas locales', es decir, la hora como la veia el usuario, hay que guardar dos cosas, la zona del usuario y un timestamp ( este ultimo puede ser w/ o WO/, normalmente es mas facil wo/ pero ambos valen ). 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] campos timestamp
omo yo estoy en Madrid el sistema me pinta que hora era en Madrid en ese instante. Espero que te ayude, de aqui coge lo que te valga, intenta algo, pregunta si tienes mas dudas, recuerda que solo TU sabes exactamente como llegaron a tu BD esas columnas y como desenredarlas. 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] autovacuum excesivo PostgreSQL 9.5
Hellmuth: 2016-10-03 15:21 GMT+02:00 Hellmuth Vargas <hiv...@gmail.com>: ... > inhabilito, pero ahora prácticamente se mantiene realizaron autovacuum a > unas tablas de forma casi permanente, tema que no sucedía antes. Ya les ... Independientemente de que este muchos mas tiempo corriendo el autovacuum, ¿ consume mas recursos ( cpu / disco etc ) ? ¿ van las aplicaciones mas lentas ? es decir, a ver si es que va mas pausado, o que te lo esta mostrando de una forma que aparece mas tiempo corriendo que antes. 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] Problema con pgbench-tool
Lazaro.. 2016-09-29 18:38 GMT+02:00 Lazaro Garcia <lazaro3...@gmail.com>: > Pero entonces no debería ser eso un bug de pgbench-tools?? Con esto del top-posting no tengo muy claro que es 'eso', pero es posible que lo sea. No uso pgbench-tools, pero parece ser una herramienta potente y compleja, y tener una serie de parametros configurables que no sabemos como has configurado. Ese tipo de error podria estar perfectemente generado porque en algun sitio tenias que configurar VAR=entero y lo has dejado como VAR=, p.e. 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] Problema con pgbench-tool
2016-09-29 17:51 GMT+02:00 Lazaro Garcia <lazaro3...@gmail.com>: > Buenos días a todos. Estoy intentando realizar unas pruebas a la base de > datos con pgbench-tools y mientras se está ejecutando el test estoy viendo > este error constantemente: > ERROR: invalid input syntax for integer: "" > LINE 1: ...e,dbsize,rate_limit) values('select.sql','16','1','','100','... > Saben a qué se deba. Sin mas contexto ( como la linea completa, o los comandos que ejecuta ) dificil, pero tiene toda la pinta de que ese '' entre el 1 y el 100 debe ser un entero, y que aunque pg convierte texto a casi cualquier cosa, enteros incluidos, una cadena vacia no es un entero valido. 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: [MASSMAIL]Re: [pgsql-es-ayuda] pg_dumpall desde maquina remota
Gilberto: 2016-09-20 19:29 GMT+02:00 Gilberto Castillo <gilberto.casti...@etecsa.cu>: > No he seguido el hilo detenidamente, pero recuerden que el permiso debe > ser para el usuario que ejecuta el pg_dump sobre la carpeta dada. > Ejemplo para usuario postgres. > $ sudo chown postgres:postgres -R /mi_carpeta_de_backup Mejor sin -R, salvo que este haciendo cosas muy raras. Y si la carpeta de backup, en general, vale para mas cosas, es peligroso, lo mejor es testear sin mas si puede escribir en ella ( echo > /capetadebackup/tst es suficiente ) 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] pg_dumpall desde maquina remota
2016-09-20 18:24 GMT+02:00 Gerardo Herzig: > Que pasa si lo sacas por STDIN? STDOUT para sacarlo. - 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] pg_dumpall desde maquina remota
Abel: 2016-09-20 14:17 GMT+02:00 Abel Osorio <abel.m.oso...@gmail.com>: > Una última cosa, y acá puedo estar diciendo cualquier cosa... ya me > corregirán. En -f ARCHIVO, ARCHIVO es local o remoto? Probaría, sólo por las > dudas, cambiar el -f por >, es decir: > pg_dump dbdatos -h 192.168.1.1 -U prueba -s -f /tmp/DBdatos.sql > pg_dump dbdatos -h 192.168.1.1 -U prueba -s > /tmp/DBdatos.sql > Con eso te aseguras que el archivo se va a crear localmente. Es local, el pg_dump es un programa en C que usa sin mas la libpq para conectarse al servidor remoto. Ante la duda, con estas cosas, mira los fuentes. 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] pg_dumpall desde maquina remota
2016-09-20 13:37 GMT+02:00 Kernel <jucab...@gmail.com>: ... > el usuario es prueba, tanto en el sistema como en la base de datos. Perfecto, otra cosa descartada. > La red va bien, esto funciona bien > psql dbdatos -h 192.168.1.1 -U prueba (ok sin problemas no pide password ) Si, eso es lo que mas mosquea.. > debe de ser algo de permisos , ahora que lo dices, que pasa si haces un 'dd if=/dev/zero of=/tmp/DBdatos.sql count=xxx' ( sustituye xxx por el tamaño aproximado que crees que va a tener el backup en kilobytes ) 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] pg_dumpall desde maquina remota
Solo una nota: 2016-09-20 9:52 GMT+02:00 Kernel <jucab...@gmail.com>: Tu copia editada no muestra el usuario del sistema con el que estas ejecutando y > He probado a crear el fichero /home/prueba/.pgpass , con permisos 600, pero > nada > 192.168.1.1:5432:dbdatos:prueba:prueba , el .pgpass tiene que estar en $HOME/.pgpass ( lo digo porque mas de uno confunde db-user con os-user , y no tenemos forma de saber por lo que mandas si ese es tu caso ). ¿ Has comprobado que las conexiones llegan desde la IP que esperas (con algun netstat, ip route y/o tcpdump ) ? ( y no se si ademas necesitas que resuelvan en inverso, eso lo deberias mirar tambien ) Y otra cosa, ¿ es lo que has puesto el pg_hba completo ? ( piorque parece que el post esta editado ). 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] Estructura tipo diccionario o hashset
Hola José: 2016-08-26 14:07 GMT+02:00 José Hurtado <jhurta...@gmail.com>: > No uso java, soy de C# y javascript, el nombre de la estructura es lo de > menos, en el título puse "diccionario" o hashset porque buscaba la > funcionalidad k-v, llamémosle KEYVALUE o DIC o XXX. Disiento. El nombre de las cosas transmite mucho, si quieres un diccionario y lo llamas conjunto vamos mal. De hecho ningun lenguaje que use llama set a los diccionarios. Otra cosa es que por motivos historicos se ha extendido, desde el perl la costumbre de llamar hashes a los diccionarios ( el perl fue de los primeros en llamarlos asi en partes extensas de la documentacion, si no recuerdo mal ), lo que ha llevado a que la gente piense que hash implica K,V, pero no es asi es map o dict lo que implica k,v, set implica k, y es un problema mucho mas facil de abordar. 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] Estructura tipo diccionario o hashset
José: 2016-08-26 10:59 GMT+02:00 José Hurtado <jhurta...@gmail.com>: > He probado con json y jsonb, el incoveniente es que son valores inmutables y > una vez que has creado un json es dificil agregarle mas propiedades, hasta > la versión 9.5 no hay funciones para agregar o eliminar una propiedad > incluso devolviendo una nueva instancia. Efectivamente, pero mucho codigo se las arregla con valores inmutables para las cadenas, p.e. ( Java, perl hasta hace poco, python si no recuerdo mal ) con lo que para esto te podrian servir, dependiendo del use case. > Para resolverlo agregué la extensión plv8, que es el motor v8 de javascript > de Chrome (https://github.com/plv8/plv8) pero creo que hay una pequeña > penalización en la conversión de tipos que haciendo muchas llamadas se llega > a notar en el rendimiento.. Aqui entra lo que decia yo, no se si el problema que tienes es que si necesitas diccionarios deberias usar un lenguaje que los tenga, como perl, tcl, python o v8, para la funcion completa, no solo para implementar el hashset. Cuando llegas a desarrollar algo que necesita diccionarios en pl/pgsql me da la impresion de que estas empezando a salirte de los limites para los que se diseño. ... > Mi propuesta va en el sentido de evitar ese salto de lenguaje que implica > una conversión de tipos usando una estructura de datos básica en muchos > lenguajes y util para resolver ciertos algoritmos. Tanto como basica, un diccionario es de las mas complejas, aunque venga de serie en muchos. 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] Estructura tipo diccionario o hashset
José: 2016-08-26 10:50 GMT+02:00 José Hurtado <jhurta...@gmail.com>: > No describo que es un hashset o diccionario porque asumo que los que no lo > conozcan y tengan interés podrían encontrar mucha información en Internet. Dejando aparte el como te contestaron o no, repito un SET es un CONJUNTO, valores unicos, sin claves. Un diccionario en java se llama MAP, y es una asociacion de claves unicas a valores cualesquiera ( matematicamente todo diccionario es un conjunto de pares k,v, pero no del todo si te deja mover v ( aunque se podria ver como un borrado mas insercionen el conjunto ), y ademas no te deja meter (k1,v1)(k1,v2), que en un conjunto irian bien ). Lo de que sea hash, tree o skiplist o sorted list es un detalle de implementacion ( Java, que ya se cito, utiliza p.e. listas desordenadas para pequeños conjuntos en algunas variantes ). 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] Estructura tipo diccionario o hashset
2016-08-24 14:16 GMT+02:00 Jaime Casanova <jaime.casan...@2ndquadrant.com>: > 2016-08-24 6:52 GMT-05:00 José Hurtado <jhurta...@gmail.com>: >> Creo que vendría bien tener algo parecido a: >> >> DECLARE >> dic1 HASHSET(varchar, schema_name.table_name); >> -- format: HASHSET(anytype, anytype) >> ... >> BEGIN >> ... >> ... >> IF (hashset_has_key(dic1, "alfa") THEN >> dic1["alfa"] := (val1, val2)::schema_name.table_name; >> -- O: hashset_update(dic1, "alfa", (val1, >> val2)::schema_name.table_name); >> ELSE >> hashset_add(dic1, "alfa", (val1, val2)::schema_name.table_name); >> END IF; >> ... >> hashset_remove(dic1, "alfa"); > Podrías por favro fingir que no todos somos expertos es Java (o al > menos creo que esa construcción es de Java o no?) e indicarnos que > haría ese HASHSET ? Tampoco creo que el OP lo sea (experto en). Parece que lo que quiere es un diccionario, mapa en java, con claves de tipo varchar. Normalmente un SET es un conjunto, es decir, solo claves, y el hash es un detalle de implementacion, puestos a pedir deberia pedir un diccionario cualquiera. Ademas parece que lo quiere tipo generic de java/ template de c++. Malamente se va a poder hacer de una forma facil. De todas formas, teniendo jsonb, y sus funciones row_to_json y demas deberia poder hacer lo que quiere sin problemas, un pelo mas largo, pero con 4 funciones de apoyo le saldria. Igual tiene mas suerte preguntandolo en -hackers, pero desde luego este tiene toda la pinta de un http://xyproblem.info/ unido a una mala eleccion de lenguage (plperl/plpython/pltcl parecen mejores si necesita ese tupo de cosas) o de sitio en el que meter la logica. 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] Re: [pgsql-es-ayuda] disable triggers dentro de una función afecta a la conexión actual o todas
Mauricio: 2016-08-10 16:52 GMT+02:00 mauricio pullabuestan <jmaurici...@yahoo.es>: > Tengo varias tablas que tiene un trigger que concatenan datos para > ingresarlos en otra tabla. > En algunas funciones hago update masivos a estas tablas pero no necesito que > el trigger se ejecute No necesitas o no quieres que se ejecute? > Al ejecutar la función que desactiva el trigger y mientras dura la ejecución, > los triggers están desactivados solo para esta conexión o para todas las > conexiones? > Si los triggers están desactivados para todas las conexiones existe alguna > manera de decir, quiero desactivar los triggers solo para esta conexión? Has probado a jugar con el session_replication_role y con el DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER ? Esta pensado para cosas similares, en sistemas de replicacion marcas determinados triggers para que se activen en el origen y otros ( o ningunos ) en la replica, y con el session_replication_role dices que eres, asi si tienes triggers que actualizan otras tablas te los saltas en la replica, ya que la replicacion te mandara las actualizaciones de todas formas. Tambien puede ser util para casos como bulk-loading en los cuales puedes calcular y cargar de golpe los datos basicos y los calculados pro el trigger de forma mucho mas eficiente. Echale una mirada al ALTER TABLE y al setting ese. 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] [OFF-TOPIC] UBer cambia Postgres por MySQL
On Thu, Aug 4, 2016 at 8:59 PM, Edwin Quijada <listas_quij...@hotmail.com> wrote: > He leido este articulo sobre como Uber cambio a Mysql desde postgres , Alvaro > y Jaime me gustaria oir su opinion acerca de lso puntos que ellos enumeran > aqui para el cambio de PG. Hay ademas una cosa fundamental ademas, que lo que hacen es cambiar XXX(no lo dicen) + Pg por YYY(no lo dicen)+ZZZ(silo dicen, un middleware suyo que no recuerdo como se llama)+MySql. Esta bien leerse los comentarios, casi todos en ingles, que ya te han comentado, pero lo del technical reasoning es muy incompleto porque se callan montones de cosas ( las que dicen son ciertas en su mayoria, no es que mientan ). 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] hash
2016-07-27 14:12 GMT+02:00 Guillermo E. Villanueva <guillermo...@gmail.com>: > Hola Edwin, con la prueba que hice me quedé tranquilo, el día que lleguen a > mas de 50 millones de registros yo y mis hijos ya estaremos jubilados jaja. > No reemplazo nada, simplemente trunco el md5(). Tengo un trigger que hace lo > siguiente: > new.columnahash := right(md5(new.columnaid),13); Ten en cuenta que las matematicas son muy putillas, y despues de 50 millones de unicos te pueden venir 3000 colisiones. De todas formas la probabilidad de colision ahi es la clasica paradoja del cumpleaños, y con 3 digitos hexadecimales y 50 millones de intentos esta en un 25% ( Aqui mi codigo, que seguro tiene algn problema, y que calcula la probabilidad de NO colision, que como casi todo el mundo sabe es la facil: $ perl -e '$x=16**13; $p=1; for (1..50_000_000) { $p*=$x-$_; $p/=$x; } print "$p\n"' 0.757633315718648 Seguro que tiene errores de redondeo y cosas asi, y creo que lo que calculo es para 50M+1, pero bueno, sus haceis una idea ) Yo probaria a usar base 64, parece que no pero cambiando 16 por 64 en ese codigo da un resultado de 0.631153 ). 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: [MASSMAIL] Re: [pgsql-es-ayuda] Fwd: Actualizar o insertar datos en postgres de SQL Server
Mario: 2016-07-14 18:12 GMT+02:00 Mario Soto Cordones <marioa.soto.cordo...@gmail.com>: ... > Quizá cuando algún día se cree una organización (si es que ya no está) que > certifique en PostgreSQL (estándar), muchos tomaríamos alguna certificación > en PostgreSQL. Eso tiene varios graves problemas. Uno es que el conocimiento de PG es en cierta medida perecedero. Otro es como lo pones. Me explico, puedes ponerlo, p.e., tan duro como 1 curso completo de universidad? X creditos ? Y habra gente que lo saque pero no demuestre demasiado. Easa certificaciones, en mi opinion, son solo validas, como apuntabas, si van acompañadas de una serie de referencias/experiencias/curriculum y demuestran una cierta evolucion temporal. Per se no demuestran mucho. Yo tengo, a modo de ejemplo, unos cuantos cursos de radio y ondas electromagneticas aprobados durante la carrera. Y tras aprobarlos sabia un monton. Pero tras 30 años sin usarlo me quedan solo las nociones mas generales ( mas una capacidad de aprenderlo, si lo necesito, mas rapido que un profano, algo queda siempre ). O en otro lado, tras usarlo desde que sacaron el 1.0 a mediaos de los ochenta yo sabia muchisimo de windows en el 2001, pero tras conseguir microsoft echarme definitivamente a golpe de "putaditas" con el XP, que fue la paja que quiebra el lomo del camello, actualmente no se manejar el windows 10. 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: [MASSMAIL] Re: [pgsql-es-ayuda] Fwd: Actualizar o insertar datos en postgres de SQL Server
Mario: 2016-07-14 17:27 GMT+02:00 Mario Soto Cordones <marioa.soto.cordo...@gmail.com>: ... > Ahora bien, a título muy personal (y por favor mi intención no es armar > polémica ni nada por el estilo): ... > - La mejor certificación es la que te pueden dar tus clientes ... > En lo personal para mi esa es la mejor certificación. El problema con esas certificaciones es que eso es mas 'pedir referencias', que tiene un problema. Si le dices a un futuro contratante que lo haga, puede no tener ganas. Aunque las tenga, la informacion util que se transmite en las referencias depende del grado de conocimientos del empleador anterior y el nuevo. Igual que cuentas esto: > Cómo anécdota: Durante muchos años trabajé como DBA de Oracle, y conocí > otros DBA Certificados por Oracle y créanme muchas veces no estaban a la > altura del certificado que poseían A mi me ha pasado repetidas veces de llegar a un sitio, presentarme al super-genio-master-del-universo en xxx al que iba a ayudar y darme cuenta de que no tenia ni papa de idea, era simplemente un buen gestor de su imagen que sabia algo mas que el jefe. Como nota por otro lado, "a la altura del certificado" suelen estar, lo que pasa es que lo que te garantiza el certificado es muy poco, y sobre todo demuestra capacidad de pasar una serie de examenes en un momento del pasado, pero hay gente que no pasa de ahi. > Con esto no quiero decir que no te certifiques, esa siempre será tu opción, Tampoco quiero decir yo que se certifique, pero el certificado, al igual que un titulo universitario, tiene un significado estandarizado. 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] funcionamiento de temp_buffer
José: 2016-07-11 1:49 GMT+02:00 jvenegasperu . <jvenegasp...@gmail.com>: > tomando en cuenta lo que decia Francisco revise el tamaño de todas las > tablas involucradas y le di a temp_buffers la suma del tamaño de tabla 1, > tabla 2 y tabla 3 con el resultado del tamaño del join. > y de nuevo todo se ejecuta como antes. > son las primeras pruebas pero incluso diria que hasta esta andando mas > rapido. Es posible que te sobre un poco mas de RAM y acelere. De todas formas... > tengo 2 bases de datos con algunos miles de registro en un primer caso > necesite temp_buffers a 15 megas y en el otro temp_buffer llego a 76 mb. que > es el tamaño que suman t1,t2 y t3 en cada caso > > Gracias ahora nuevamente todo esta andando bien aunque un me pregunto como > actuaria si la BD fuera mas grande y no me alcanzara la memoria. Ya te han sugerido la solucion rapida, compra RAM ( temp_buffers no se usa si no se pide, con lo que si tu funcion brutal va en sesiones contadas no pasa nada, pero si va en muchas, ojito ). De todas maneras, sin haber visto casi nada de tu problema, esto tiene un cierto tufillo a que estas haciendo lo que no deberias en la base de datos ( ese tipo de queries con tablas temporales surgen mucho cuando se prototipan cosas que deberian hacerse de ota forma mediante SQL. En el prototipo no importa demasiado el que la solucion SQL sea un "resource hog" porque es una prueba, pero luego no escala en produccion. Revisa bien tu solucion. Ya te han sugerido ademas por otro lado que pruebes a quitarte t1/t2 si no las necesitas. Eso suele ser facil, solo necesitas pasar Create table t1 as q1, create table t2 as q2, create table t3 as join(t1, t2) from t1, t2 por un create table t3 as join(...) from (q1) t1, (q2) t2 ( o, si el query se beneficia de CTEs usalas, como siempre, mide dos veces corta una ). 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] funcionamiento de temp_buffer
Buenos dias.. 2016-07-10 17:41 GMT+02:00 jvenegasperu . <jvenegasp...@gmail.com>: ... > ¿La sesion de base de datos se considera al total del codigo dentro de la > función? es decir si tengo 3 tablas temporales y cada una usa por ejemplo 2 > Megas y asigno un temp_buffer de 10 megas aun tendria 4 megas para usar > dentro de la función? La sesion es todo lo que haces desde que conectas hasta que desconectas. Vamos, un backend. > ¿Pienso que el temp_buffer es por cada tabla temporal creada entonces en mi > caso tengo asignado temp_buffer a 10 megas y tengo dentro de la función 3 > tablas temporales estaria usando 30 Megas? La documentacion parece indicar lo contrario: "Sets the maximum number of temporary buffers used by each database sessionA **session** will allocate temporary buffers as needed up to the limit given by temp_buffers" Vamos, que es la sesion, no la tabla temporal. > ¿Que pasa si la tabla origen para formar la tabla temporal pesa mas de los > 10 Megas asignados? entonces ya no se estaria usando el temp_buffer en la > RAM sino un espacio en disco duro? Probablemente. Recurda que tu disco tiene cache tambien. De todas maneras no es bueno pensar en las tablas temporales como "tablas en disco ram", te puedes llevar sorpresas con estas cosas. > ¿y finalmente en el caso del join cuando espacio necesitaria el temp_buffer? > la suma del espacio de las dos tablas o solo el espacio necesario para > almacenar temporalmente el resultado de las dos tablas? Depende. Que hay en t1 y t2? Es id unico? existen todos los pares? Ten en cuenta que con un t1,t2 de 100 registros cada una tu ejemplo puede producir de 0 a 1 registros en t3 con lo que has mostrado. De todas maneras necesitaras espacio para materializar el join del create table, ya que el server no sabe que vas a hacer con el resultado ( igual te lias a hacer updates random en el, y necesitas todas las filas ). 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] Usando WAL en memoria junto con streaming replication
Eduardo: 2016-07-07 19:40 GMT+02:00 Eduardo Morras <emorr...@yahoo.es>: ... >> Mmm, me poner los pelos como escarpias. Yo que tu mediria primero, si >> el esclavo es rapido Y lleva la carga principal no creo que vayas a >> ganar demasiado ( y to personalmente no lo haria sin una ganacia bien >> grande ). > Es mas que nada para evitar gastar mucho dinero en el servidor Maestro > e invertirlo en el Esclavo, que es el que se va a llevar el trabajo > duro. Los recursos monetarios son limitados. Dado que la RAM es mas cara que el disco De todas formas mide en algun desktop a ver cuanta diferencia te hace meter los logs en RAM, ten en cuenta que al disminuirte la RAM disponible por el disco RAM tendras que ponerle mas y pagarla. Los xlog tampoco van tan lentos, salvo que le zurres muchisimo. Por otro lado ten en cuenta que el esclavo tiene que guardarlos en almacenamiento estable y aplicarlos de todos modos. >> Es mas, haz una prueba pero me da que el maestro, salvo que hagas >> algun truco para guardar el xlog, se pudriria no solo cuando se >> ahostie, sino tambien cuando pares la maquina ( la prueba es facil, >> coge un cluster, paralo, borra el directorio de xlog, arranca a ver >> que pasa ), en cuyo caso vas a tener mas movidas aun con los upgrades. > Ahi depende de como pares la maquina. Siempre parar primero Postgres > (pg_ctl stop -m smart) y despues hacer el shutdown. Nunca confio en que > llamar a shutdown directamente pueda parar correctamente postgres o > cualquier otro demonio mio, tiene la mala costumbre de matar todo > pasado un timeout y dejar las cosas a medio hacer. No, no es eso lo que digo. Lo que digo es que en condiciones normales si tu haces un reboot, y tienes la maquina bien configurada, el postgres tiene el xlog ahi cuando rearranca, que no se lo que se queda dentro. La cosa es si puede hacer un pgctl stop smart, borrar el directorio de xlog, pgctl start y sigue funcionando. >> Yo, antes que esto, mediria bien a ver que pasa, y si realmente no da >> la velocidad probaria antes de hacer esto con un fsync=off en el >> maestro ( que hace que solo se te pudra cuando se ahostia la maquina, >> no cuando se la pega el server, y en las pruebas que he hecho yo >> habitualmente va a todo trapo ( lo uso mucho para actualizaciones, >> backup, fsync off, transformaciones, fsync on ). > Si, esta parte Alvaro tambien la ha comentado. Lo suelo usar en sqlite, > pero no habia pensado en usarlo con Postgres. Yo he bajado pg_restores de horas a minutos tuneando configuraciones, y el sync es una de ellas. 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] Usando WAL en memoria junto con streaming replication
Hola Eduardo: 2016-07-07 17:02 GMT+02:00 Eduardo Morras <emorr...@yahoo.es>: > Muy buenas, estoy haciendo unas pruebas en desarrollo con 2 postgres, > Maestro-Esclavo. La carga de trabajo va a ser principalmente de lectura. Para > ello voy a poner el Maestro en un servidor pequeño y el esclavo en el grande, > usando pgpool para hacer las consultas de lectura en el Esclavo. > Quiero probar si crear un disco en memoria en el Maestro para contener el > directorio xlog (los wal) aumentara y en que medida la performance del > Maestro. Puedo dedicar un enlace de red para la transferencia de los wal al > esclavo, por lo que habria un delay minimo entre Maestro y Esclavo. Mmm, me poner los pelos como escarpias. Yo que tu mediria primero, si el esclavo es rapido Y lleva la carga principal no creo que vayas a ganar demasiado ( y to personalmente no lo haria sin una ganacia bien grande ). > La consulta es si una caida del Maestro y no mandar todos los wal al Esclavo > pueden provocar una corrupcion en este ultimo. Entiendo que no, el Esclavo > quedaria a la espera de los wals faltantes, no recibiria el heartbeet del > Maestro y haria un roolback de las transacciones a medio hacer Hombre, normalmente una caida del maestro se recupera al levantarlo, lo que no es asi en tu caso. El maestro se pudre y ante cualquier caida tendrias que promover el esclavo a maestro, que tendra el retardo que le toque, y reconstruir tu sistema desde ahi ( recopiar el maestro, volverlos a girar ). Es mas, haz una prueba pero me da que el maestro, salvo que hagas algun truco para guardar el xlog, se pudriria no solo cuando se ahostie, sino tambien cuando pares la maquina ( la prueba es facil, coge un cluster, paralo, borra el directorio de xlog, arranca a ver que pasa ), en cuyo caso vas a tener mas movidas aun con los upgrades. > Ya se que el Maestro quedaria corrompido, eso no importa, puedo usar el > Esclavo de lectura para realizar una recuperacion o incluso otro servidor > (pequeño tambien) para almacenar los wals, backups u otro esclavo en sr. Yo, antes que esto, mediria bien a ver que pasa, y si realmente no da la velocidad probaria antes de hacer esto con un fsync=off en el maestro ( que hace que solo se te pudra cuando se ahostia la maquina, no cuando se la pega el server, y en las pruebas que he hecho yo habitualmente va a todo trapo ( lo uso mucho para actualizaciones, backup, fsync off, transformaciones, fsync on ). 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] Pregunta sobre indices
Hola Alberto: 2016-06-23 6:47 GMT+02:00 Alberto Cuevas <betocuevas@gmail.com>: > Por lo que he leído los Indices me sirven para que la búsqueda sea mas > rápida. Basicamente, y en ocasiones se usan para implementar unicidad. > Tengo una tabla (por dar un ejemplo) que tiene un PK y 2 FK > CREATE TABLE cliente ( > id_cliente INTEGER NOT NULL (PK) > id_sucursal INTEGER NOT NULL (FK) > id_documento INTEGER NOT NULL (FK) > > Mi pregunta es cuando se crea en una tabla los campos Primary Key y Foreign > Key estos por defecto ya son Indices? o debo de crearlos independientemente? Eso de (pk) no es sql ( otra cosa seria '-- (pk)' ), con lo que sospecho que no es la sentencia original. En general cualquier duda que tengas sera mejor resuelta si pones el codigo real que usas, con algun trozo anonimizado si es secreto . Normalmente lo que sueles hacer es "id_cliente INTEGER PRIMARY KEY". Primary key se traduce, entre otras cosas, por "unique not null", y unique hace que se te cree un indice, para que el servidor pueda detectar duplicados sin leer toda la tabla. Ademas al hacer primary key el servidor ya sabe a donde apuntan los foreign keys que declares en otras tablas sin mas que dar el nombre de tabla referenciada. Y si usas foreign key en las relaciones de ese tipo la gente que lea tu sql sabra lo que quieres hacer. > De ser la respuesta no entonces debo crear 2 indices para id_sucursal y > id_documento? Las foreign key no te las indexa por defecto. La razon es que no le hace falta, y puede que tu solo las uses en la direccion fk->pk, con lo que indexarlas seria una perdida de tiempo. Si las usas en la direccion inversa, lo que es muy habitual, conviene que las indexes a mano tras crear la tabla ( direccion inversa, pk->fk es p.e. cuando haces cosas como 'on delete cascade/set null' o 'select c.* from cliente c, sucursal s where s.id_sucursal = c.id_sucursal and s..). En general depende de tus 'use pattern'. Para tus nombres de tabla tiene toda la pinta de que deberias indexarlas, pero puee que los llames asi y tengan datos de protones, neutrones y electrones. 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: [MASSMAIL][pgsql-es-ayuda] INSTALACION DE POSTGRES
Buenas tardes: 2016-06-08 18:47 GMT+02:00 Maria Antonieta Ramirez <marami...@ulsaneza.edu.mx>: > pues la version que quiero instalar es la 9.4.0.1 porque en esa tengo mi > base y tengo el ejecutable. Esta es una de las razones por las que no se suele hacer "top-posting", es dificil saber de que hablas ( y yo no me voy a molestar en cortar y pegar para intentar corregirlo )... En otro orden de cosas: > aunque vi que en la pagina de descargas ya no esta esa version, esta la > 9.4.8. > una pregunta , si yo instalo la version 9.4.8, podre subir sin ningun > problema un respaldo de mi base que esta en la version 9.4.0.1?? En postgres las diferencias en el tercer digito ( 9.4.x ) son compatibles a nivel binario ( salvo rarisimas excepciones ). Es decir, si tienes una 9.4.x e instalas una 9.4.y con y>=x puedes utilizar directamente los mismos archivos de la BD, no hace falta ni tocarlos ( en algunas ocasiones, que suelen estar comanetadas, creo que hizo falta un reindex, pero nada mas alla ). Dicho esto, lo normal es avanzar siempre que puedas a la ultima version de la linea, es decir, ve a la 9.4.8. Respecto al respaldo, depende de como lo hayas hecho. Si lo has hecho con pg_dump suele ser compatible con versiones del servidor iguales ( en los dos primeros digitos ) a la version de pg_dump con la que hiciste el backup ( de pg_dump, esto es importante, la forma canonica de pasar, p.e., de la 8.4 a la 9.3 es volcar la 8.4 con el pg_dump de la 9.3 ( que entiende los formatos antiguos ) y con el pgrestore de la 9.3 restaturarlo. Si es un pg_basebackup realmente es una copia astuta de archivos, y es igual de compatible que el directorio original. 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] Copiar funciones entre bases de datos
Hola Jorge: 2016-05-27 13:48 GMT+02:00 Jorge Tornero - Listas <jtorlis...@gmail.com>: > ¿Existe alguna manera de copiar funciones entre bases de datos? Me refiero a > funciones creadas por el usuario y mediante un proceso tipo pg_dump o > similar. Prueba lo siguiente ( para linux, a mi me ha funcionado ): 1.- pg_dump schema only: pg_dump -Fc -U usuario -h host -s -f tst.dmp database Fundamental aqui, el -Fc ( lo mejor siempre para hacer cualquier pg_dump ) y -s para schema only. 2.- Busca las funciones. pg_restore -l tst.dmp | fgrep FUNCTION > tst.funcs 3.- Restauralas, en este caso yo te recomendaria hacerlo asi para tener un SQL que verificar: pg_restore -L tst.dic tst.dmp > funcs.sql El combo -l / -L es de gran utilidada. Aparte de eso a mi me ha ayudado en repetidas ocasiones cuando un restore da problemas y quieres tocar algo a mitad. Cierto, con un .sql lo puedes editar, pero con un -Fc puedes hacer un -l, partirlo en dos cachos, correr uno, pasar un script de fixups, correr el otro, de ahi que recomiende siempre el Fc ( ademas de un -Fc se saca el .sql, pero no al reves ). Lo del -s arriba es por velocidad, tambien te funciona con cualquier backup completo si ya tienes uno hecho. 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] PLPGSQL o SQL
2016-05-13 16:39 GMT+02:00 Herman Estaban <hermanesta...@gmail.com>: > Buenos días, cuando debo usar LANGUAGE plpgsql o sql? Cuando te vaya bien, depende de lo que quieras hacer. > Hay ventajas de uno al otro? SQL te vale para poco mas que masajear un poco los datos o hacer 4 cuentas, pero es mas sencillo. Incluso para cuando quieres filtrar sin mas algun acceso, o forzar accesos por funciones a alguna tabla a base de jugar con los permisos de tablas y funciones viene muy bien. Pero no te deja mucho mas que juntar tres queries en fila. Si tienes necesidad de hacer algo medianamente complejo, necesitaras plpgsql, que es un lenguage mas complejo pero te deja meter logica mas interesante. 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] sentencia cluster
2016-05-05 0:49 GMT+02:00 heriberto giron <heribertogir...@gmail.com>: > Alguna persona me puede indicar como es el uso de la sentencia cluster y si > en verdad agiliza o mejora las respuesta de los select, si en verdad los > realiza mas repido Ya te han apuntado a las docs, basicamente ahi esta todo lo que tiene para usarla. Respecto a la velocidad, es equivalente a copiar a otra tabla ordenado por el indice ( create table as select * from order by campos_del_indice), mas o menos, y en algunos casos te incrementa la velocidad. Te cuento un caso mio. Yo tengo unas tablas, que basicamente son insert-only, con un indice por timestamp, que se insertan muy bien correladitas. Las consultas normales van muy rapido porque suelen tener un rango de TS, con lo que el indice las dirige a un rango de paginas pequeño en el que estan todos los registros, y no se lee mucho de disco y ademas se suele leer en secuencia practicamente, y tengo montones de consultas de esas. Pero, a veces, hay que parchear con unos cuantos updates y se 'enguarra' la tabla y va marginalmente mas lento. En esos casos un reclustering por el indice me devuelve la velocidad inicial ( y ademas me suele liberar espacio, ya que me deja todas las filas sin agujeritos, causados por los vacuums tras los updates ). Para este tipo de cosas va muy bien, pero como se suele decir, YMMV. Ademas para mi es facil ya que tipicamente cuando hago eso paro temporalmente las inserciones, ejecuto los scripts de update, pego el cluster al terminar y reactivo las inserciones. Ademas, el compactar la tabla hace que todas las inserciones vayan en filita al final, no reaprovechando los agujeros, lo que tambien acelera muchisimo ese proceso. 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] modos de bloqueo
2016-04-19 19:55 GMT+02:00 Kernel <jucab...@gmail.com>: > Voy a hacer un proceso de facturacion y necesito asegurar que nadie pueda > facturar en el mismo momento que yo. > Necesito bloquear una tabla de manera que nadie pueda hacer un insert, > update o delete, solo pueda leer de la tabla pero nada mas hasta que termine > el trabajo. > > ¿CUAL SERIA EL TIPO DE BLOQUEO MAS ADECUADO? Buff, probablemente LOCK EXCLUSIVE, que da conflicto con todo menos con el select si no recuerdo mal, mirando ademas el nivel de aislamiento que necesitas. 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: [MASSMAIL][pgsql-es-ayuda] modos de bloqueo
2016-04-19 20:02 GMT+02:00 Gilberto Castillo <gilberto.casti...@etecsa.cu>: >> ¿CUAL SERIA EL TIPO DE BLOQUEO MAS ADECUADO? > Ninguno, si quieres hacer eso has las transacciones serializable y listo. IRL eso no es tan sencillo, hacer las transacciones serializables te garantiza que de hacerlas lo haras bien, pero tienes que estar preparado a reintentar si hay deadlocks, y el problema con los procesos de facturacion en ocasiones es que son transacciones larguisimas, y si no paras de alguna forma al resto nunca consigues terminarlas, siempre se te mete alguien por el medio que te joroba. Depende del diseño de la BD, pero en ocasiones tienes tu deuda tecnica y no te queda mas que bloquear la tabla entera. Ah, como añoro la epoca de las tarjetas y cintas en las que esto nunca pasaba. 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] Insertar Foto en tabla y como visualizarla
Buenos dias: 2016-04-17 6:48 GMT+02:00 José Fermín Francisco Ferreras <josefermi...@hotmail.com>: > Como puedo insertar una foto en una tabla en postgres mediante comando: > CREATE TABLE esquema.documento > ( > numero_documento serial NOT NULL, > fecha_documento date NOT NULL, > nombre_cliente integer NOT NULL, > foto_documento bytea NOT NULL, > ); > Me pregunto si se insertara de esta manera: > insert into esquema.documento(fecha_documento, nombre_cliente,foto) values > ('2016-04-17','Juan Perez','c:\foto.jpg'); Desde luego, asi no. Tienes que leer en el cliente la foto de alguna manera y ponersela en alguna sintaxis que se entienda, hay varias en el manual. El como depende sobre todo de que aplicacion estes usando para manejarla (p.e., si estas usando psql tienes pocas alternativas aparte de ponerla como una constante ). P.e. Un jpg cualquiera: $ od -t x1 -tc redacted_filename.JPG | head 000 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 02 58 377 330 377 340 \0 020 J F I F \0 001 001 001 002 X puede describirse como una constante bytea E'\\Xffd8ffe000104a464946000101010258...' Dependiendo de tu entorno hay muchas formas de construirla, p.e. $ head -c16 Documents/Boda\ y\ abuelos.JPG | perl -e "\$q=qq('); "' undef $/; print "E$qx",unpack("H*",scalar(<>)),"$q\n"' E'\\xffd8ffe000104a464946000101010258' ( Parece mas de lo que es por lo dificil que es meter un script de perl que use ' y " y \ en la linea de comando del bash, probablemente en un archivo te quede solo: #!/usr/bin/perl undef $/; # Slurp whole stdin in one go. print "E'x",unpack("H*",scalar(<>)),"'\n"' > Y como se puede visualizar el registro con su imagen?? Pues como al reves, consigues el byte a y lo pasas a binario y se lo das a la rutina / programa. > Alguien me puede ayudar?? Seguro, pero deberias empezar por decir mucho mas de lo que pones, como que lenguage/sistema operativo/entorno estas usando ( parece windows por el C:\, con lo que yo no mucho, pero hay mucho experto de windows suelto por aqui ) ( porque p.e. lo que te dije fallara casi seguro en windows por el tema del binmode aunque tuvieras perl y head ). Un saludo. 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] Nuevo campo en todas las tablas de la base de datos
Buenos dias: On Wed, Apr 13, 2016 at 12:33 AM, mauricio pullabuestanwrote: > Necesito crear un campo en todas que no tengan un campo en concreto para ello > tengo 2 funciones, el problema se da es que la funcion > campo_check_fnc me devuelve también las vista y se produce un error. > Como puedo fitrar que solo me devuelva tablas. Asi por encima tu problema parece ser que seleccionas de donde no debes ( o para ser exacto no seleccionas de todos los sitios donde debes ): > SELECT table_schema, table_name > FROM information_schema.columns ... >SELECT table_schema, table_name, column_name = 'mi_campo' As > existe_campo > FROM information_schema.columns ... Si vas a las docs veras ( lo siento, en ingles, no se donde estan las docs en español ): http://www.postgresql.org/docs/9.5/static/infoschema-columns.html 34.16. columns The view columns contains information about all table columns (or view columns) in the database. System columns (oid, etc.) are not included. Only those columns are shown that the current user has access to (by way of being the owner or having some privilege). Prueba a hacer un join con tables para coger solo las tablas: http://www.postgresql.org/docs/9.5/static/infoschema-tables.html 34.52. tables The view tables contains all tables and views defined in the current database. Only those tables and views are shown that the current user has access to (by way of being the owner or having some privilege). table_type - character_data - Type of the table: BASE TABLE for a persistent base table (the normal table type), VIEW for a view, FOREIGN TABLE for a foreign table, or LOCAL TEMPORARY for a temporary table ( Podrias probar a hacer un not exists o u nouter join filtrado con views, pero creo que tables.table_type te dara mejor resultado ya que te permite decidir que hacer con las FOREIGN TABLE y/o TEMPORARY TABLE ). Fancisco 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] permisos del directorio postgresql
2016-04-06 8:47 GMT+02:00 Horacio Miranda <hmira...@gmail.com>: > Si es linux, chown postgres: -Rv /var/lib/pgsql chown = change owner, una pista te la da el que no le das permisos, le das un usuario, los permisos unix basicos se cambian con chmod, y los avanzados ya depende mucho del FS, y es el chacl y vecinos. $ chown --help ... Change the owner and/or group of each FILE to OWNER and/or GROUP. ... $ chmod --help ... Change the mode of each FILE to MODE. ... Normalmente por permisos se suele entender el MODE. Sin prejuicio de que alguien que reporta sin decir el SO puede que haya cambiado el owner, no los permisos. 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] Logical Replication en 9.4
2016-03-19 18:04 GMT+01:00 Edwin Quijada <listas_quij...@hotmail.com>: > Se puede replicar una sola BD y no el cluster con logical replication? Si, de hecho solo se puede replicar una ( puedes replicar el cluster, pero una a una ) Eso si, mientras que todo lo que necesitas para streaming replication viene con el servidor de postgres para hacer cosas con logical tendras que buscar algun componente mas, como el pglogical de 2ndquadrant. Los he mirado alguna vez pero no los he llegado a usar en prod. porque siempre tengo que replicar los clusters enteros. El pglogical es similar a la tipica replicacion por triggers, pero aprovechandose de que toda la informacion necesaria esta en el WAL. Permite, teoricamente, todo lo que esta, como replicaciones parciales, multidireccionales, entre distintos sistemas etc..., pero la parte que viene incluida en el servidor es solo la de leer lo que ha pasado en el master. 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] Logical Replication en 9.4
Alberto: 2016-03-15 16:54 GMT+01:00 alberto cordones <listas.alberto.cordo...@gmail.com>: > Hola Jaime, asi tengo configurado la replicacion logica sin utilizar > pglogical y funciona bien. Se que funciona bien ya que he hecho muchas > pruebas de replicación y todas exitosas, es por eso que me di cuenta que los > archivos wal crecen mucho al caer uno de los esclavos > Configuracion de todos los nodos: ... > Los nodos esclavos tiene un archivo extra llamado recovery.conf > esclavo 1 > standby_mode = 'on' > primary_conninfo = 'user=postgres host=192.192.192.3 port=5432 > sslmode=prefer sslcompression=1 krbsrvname=postgres' > primary_slot_name = 'slave1' Eso NO es replicacion logica, es steaming-replication ( fisica, por llamarla de alguna forma ) con slots. Aunque se llamen slots lo unico que comparten con los de logica es mantenerte vivos los segmentos de wal, pero no slots logicos. 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] Logical Replication en 9.4
Alberto: 2016-03-15 1:17 GMT+01:00 alberto cordones <listas.alberto.cordo...@gmail.com>: > Muchas Gracias Jaime, por aclarar mis dudas, a tu pregunta, no, solo estoy > usando logical replication a nivel de wal_level, no estoy utilizando > pglogical Bajalo entonces, salvo que lo quieras por tenerlo preparado para hacer cosas de logical. Segun la documentacion ( en ingles, lo siento, ni se donde esta la doc en castellano, siempre me voy al original, de http://www.postgresql.org/docs/9.5/static/runtime-config-wal.html#RUNTIME-CONFIG-WAL-SETTINGS ) "wal_level determines how much information is written to the WAL. The default value is minimal, which writes only the information needed to recover from a crash or immediate shutdown. archive adds logging required for WAL archiving; hot_standby further adds information required to run read-only queries on a standby server; and, finally logical adds information necessary to support logical decoding. Each level includes the information logged at all lower levels. This parameter can only be set at server start." Como ves para streaming replication solo necesitas archive ( igual que para log shipping, al fin y al cabo es mas menos un log shipping rapido por red ). hot_standby te permite leer en el esclavo ( que exige mas informacion para que no se destruya informacion que el esclavo esta leyendo, es decir, si tu estas haciendo un select de una tabla en el esclavo no puede aplicar logs de un delete en esta, con lo que se debe pasar informacion de transacciones y cosas asi ) y el logical incluira algo mas que le haga falta ( que estara en las docs ). 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] Logical Replication en 9.4
Alberto: 2016-03-14 21:57 GMT+01:00 alberto cordones <listas.alberto.cordo...@gmail.com>: > esto ultimo no lo entendi muy bien > "Creo que ademas va por BD, no por cluster, lo que en algunos casos te > puede disminuir muchisimo el trafico." > ..ya que cuando configuro el servidor (postgresql.conf), lo configuro para > todo el cluster, no para una sola base de datos Veamos. La streaming replicacion va mandando todo el wal por una conexion y aplicandolo, con lo que manda el cluster entero, si hay 10 bd las manda todas. Si creas una nueva se manda sola, incluyendo su creacion. Hay unos slots de replicacion par streaming, que lo que hacen es que el maestro sepa cuanto wal les falta a los esclavos, y que se pueden usar para que no borre los wal durante un base backup ( que es parecido a una replicacion en streaming ) o que espere a los esclavos. Basicamente se crea uno por cliente persistente que tienes y contienen poco mas que cual es el ultimo log procesado en el esclavo para que el master pueda calcular el minimo de eso y saber que hasta ahi puede borrar. Luego estan los slots logicos, que son distintos. Se crean POR BD, con funciones SQL contra esa BD, y sirven para dos cosas. Por un lado tienen un puntero para que no se borren los wal, como los otros, pero por otro lado entre su funcionalidad basica y sus plugins lo que hacen es extraer los cambios de la BD en la que estan para presentarlos en una forma estandard. Eso hace que valgan para mas cosas pero son mas complicados de manejar. Cuando usas la replicacion logica lo que recibes no es el wal crudo, que es algo como 'escribir estos trozos de bytes en estas paginas de este archivo' ( lo que es muy rapido, pero poco fino, y solo vale entre dos servidores de postgres muy similares ), sino cosas como "poner tal cosa en tabla tal, borrar tal otra,", y ademas solo de una BD. Ese flujo de informacion es mas compacto, lo que puede disminuir tu trafico de red aun cuando repliques todo ( de la misma forma que, p.e., un pg_dump suele ocupar, aun sin compresion, menos que la BD en disco ). De hecho hay una cierta similitud, la streaming replication se parece a copiar el directorio de datos del server. Va todo el cluster pero es simple y rapido. La logica es parecida a un pg_dump/pg_restore, va una base de datos, es mas flexible, se mueven menos datos ( por ejemplo no van los indices ), pero es mas compleja y exige mas procesos. Ademas el dump-restore funciona entre versiones, y te vale hasta para meter datos en otro motor de bd con un poco de cuidado, como puedes hacer con la replicacion logica. Vamos, que son animales distintos. 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] Logical Replication en 9.4
Buenas: 2016-03-14 20:43 GMT+01:00 alberto cordones <listas.alberto.cordo...@gmail.com>: > Si, muchas gracias a todos.ya que se me aclararon algunas dudas, sin embargo > por lo que he estado leyendo, logical replication es es mejor que > hot_standby,independiente del tema de la cantidad de wal que se generan. o > estoy equivocado Depende de para que. Si quieres replicar el cluster entero el streaming replication ( hot standby ) total tiene la ventaja de que es muy simple. El logical es, por lo que se, mas flexible, pero me temo que dependera de que quieres exactamente conseguir. Si tienes lo que yo, dos maquinas una en servicio otra esperando, con un enlace de red dedicado de una a otra ( con lo que el ancho de banda es salvaje y el retardo minimo, y como la secundaria solo aplica los pone nada mas llegan ) el streaming va genial, y ademas no tengo que hacer nada cuando creo nuevas BD. Ademas creo que hay cosas como el synchronous que no se pueden hacer con el logical replication ( que es similar a una replicacion por triggers superoptimizada ). 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] Logical Replication en 9.4
2016-03-14 19:27 GMT+01:00 Hellmuth Vargas <hiv...@gmail.com>: > Por otro lado, tengo entendido que la replicacion lógica se implementa > cuando se desea hacer algún procesamiento adicional (replicacion parcial, > extraer las sentencias ejecutadas, en un futuro la replicacion > bidireccional, etc, etc.), si no es el caso con wal_level = hot_standby > seria suficiente. Creo que ademas va por BD, no por cluster, lo que en algunos casos te puede disminuir muchisimo el trafico. 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] Logical Replication en 9.4
Hola Alberto: 2016-03-14 19:08 GMT+01:00 alberto cordones <listas.alberto.cordo...@gmail.com>: > Mi temor es que si quedo fuera de linea por mucho tiempo y no me doy cuenta, > lo mas probable es que me quede sin espacio en el directorio pg_xlog y como > consecuencia de esto el nodo master deje de atender. Precisamente de eso se trata, cuando el master deje de responder te daras cuenta. Los slots tan para que cuando quieras garantizar que el maestro no borra logs no transmitidos, incluso si no recuerdo mal las ultimas versiones de streaming replication permiten usarlos para eso. Por otro lado la unica forma de garantizar que el esclavo no pierde logs cuando esta caido es que el maestro los retenga todos, con lo que no podra avanzar si se queda sin disco, has de elegir una de dos, o permites parar el maestro o permites perder el esclavo. Por otro lado los replication slots pueden borrarse desde otra aplicacion, con lo que podrias probar a monitorizar el espacio en disco del maestro y borrarlos ( emitiendo la correspondiente alerta ) cuando este a punto de quedarse sin espacio. La ventaja de esto frente a un wal-keep-segments enorme es que en el primer caso necesitas espacio para el monton de WALs siempre, haciendo algo asi eres mas dinamico, si el maestro tiene mucho espacio libre donde guarda el WAL aguanta retrasos enormes, pero si tiene poco no se para, aunque pierdes mas esclavos. Te puede ir bien porque en el caso de que un esclavo se pare mucho y te machaques su slot probablemente es que esta tan mal que es mejor hacer una reconstruccion con pg_basebackup ( que, si no recuerdo mal, tambien puede usar replication slots ). Nunca vas a encontrar un sistema que permita recuperarse de un retardo ilimitado en el esclavo sin un almacenamiento ilimitado en el maestro, o en algun otro sitio, si haces wal shipping. 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] Re: [pgsql-es-ayuda] Tamaño de base de datos
Buenas tardes: 2016-03-12 15:00 GMT+01:00 Edwin De La Cruz: > Estimados. Saludos cordiales. > Tengo una consulta un poco básica, en mi servidor tengo una base de datos > con más o menos unos 500 millones de registros con tablas particionadas por > meses y va llegando el tamaño a los 70 gigas. Dado que parece que sabes como sacarlo, iria bien que indicases cuantos registros por particion tipica, y el tamaño de una con sus indices, siempre es mas facil.. > Pero cuando saco respaldo no supera los 5 gigas. ... asi como que comando usas para el respaldo ( e iria bien si pudieras hacerlo de una sola particion, la que selecciones como tipica, y mirases el tamaño de solo esa ). Es normal que las tablas ocupen menos al volcarlas ( ya que aunque algunos campos perversos crecen al pasarlos a textos muchos disminuyen, porque la representacion en disco esta pensada para ser actualizable y muybien delimitada, no super compacta ) y que suelen comprimirse en stream ( todo el volcado de golpe, lo que hace que algunos se compriman fantasticamente ). > Como puede ser eso, seguro hay algún tipo de compresión > pero como puedo hacer para que mi tamaño de base de datos se comprima? > Los campos de datos tipo text son pocos y la mayoría no superan los 300 > caracteres, exepto un campo que es tipo text con textos que pueden ser > grandes, más de 1000 caracteres, hay alguna forma de comprimir sólo ese > campo o el texto antes de insertarl0? Puedes hacer cosas con la tabla, pero sin saber la estructura total puede ser peor el remedio. Supongo que no tendras campos tipo CHAR(n) en lugar de VARCHAR(n) ( eso te mata, mira http://www.postgresql.org/docs/9.5/static/datatype-character.html , "The storage requirement for a short string (up to 126 bytes) is 1 byte plus the actual string, which includes the space padding in the case of character" ). Por otro lado supongo que no tendras problemas de tabla con mucho traqueteo y filas muertas ( eso lo sabras por tu patron de uso, y si la carga te lo permite puedes hacer un vacuum full en una particion antigua, o copiar la tabla a una nueva sin indices para verificarlo ). > Posibkemente me digan que quizá los índices son muy grandes, pero no, el más > grande no supera un giga. ¿ Pero cuantos indices tienes por particion ? ( de ahi la pregunta de arriba ). > Son algunas preguntas y espero que me puedan orientar al respecto. Ahi te van algunas mas, y alguna indicacion que puede ayudarte. Franciso 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] Ayuda a conexion
Buenas Tardes: 2016-01-14 17:32 GMT+01:00 Luis Alberto Suarez <luissuarez2...@gmail.com>: > Tenemos una aplicacion publicada para que la podamos acceder externamente a > través de internet, esta aplicación tiene su motor de base datos postgresql > 8.4, pero al conectarnos a la aplicacion nos permite un conexion normal pero > cuando vamos a accer a una base datos nos arroja el siguiente mensaje "Se > produjo un error al realizar la operacion, por favor comunicarse con el > administrador. Sin mas detalles, dificil sera que te ayudemos, dado que no sabemos que es "la aplicacion publicada" y que el error no te lo da al conectar a postgres sino "al conectarnos a la aplicacion". > Ya revise los archivos de configuracion, el postgresql.conf y el pg_hba.conf > veo que estan bien Pues si estan bien, el problema parece ser en la aplicacion. > Que puede estar sucediendo que tips me pueden dar para darle solución a este > inconveniente Dar algun detalle mas, esto es como si te digo "compre sal, revise que es NaCl, pero la comida no me sabe bien", estamos un poco lejos del problema. En otro orden de cosas, si necesitas la 8.4, vale, pero es un pelin vieja y totalmente fuera de soporte. 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] Consultas complicada
Buenos dias: Una respuesta, larga, te voy desarrollando cosas. On Fri, Dec 18, 2015 at 8:44 PM, ViBaSoft <vibas...@gmail.com> wrote: > Quiero sacar el precio minimo, máximo, media por mes por columna y una > general, en la general me sale bien pero por mes columna no me trae el > minimo. Me trae 0(cero) siempre en la columna min_enero Tu problema es el clasico de mal valor por defecto. Estas haciendo el MIN de una columna de precios ( >=0 ) con un 0 cuando no es enero, con lo que te sale 0: > MIN(CASE WHEN extract(month from c.fecha_factura)=1 THEN cd.preciocompra > ELSE 0 END) AS precio_min_enero, En cuanto una fila de febrero entra el el case da 0, el minimo es 0. Prueba a poner un numero enorme en el else, no se cual decirte ya que no has puesto el esquema de la tabla pero siendo precios si pones 'ELSE 99' te deberia valer. Esa es la solucion clasica usada cuando calculas un minimo corrido en un lenguaje clasico, inicializar el minimo al nuero mas largo que puedas y si el valor leido es menor, actualizr ( min=, if curr select min(case when mes=1 then precio else 0 end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); min - 0 (1 row) La solucion con el 9: cdrs=> select min(case when mes=1 then precio else 9 end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); min - 2.0 (1 row) Que tiene un problema si no hubiera datos de enero, por ejemplo para el mes 3 pasa esto: cdrs=> select min(case when mes=3 then precio else 9 end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); min --- 9 (1 row) Que es necesario controlar fuera de banda, si en lugar de 999 usas null te viene un null de resultado: cdrs=> select min(case when mes=3 then precio else null end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); min - (1 row) Que es mas facil de distinguir. Comprobamos que el caso del 1 sigue funcioanado igual: cdrs=> select min(case when mes=1 then precio else null end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); min - 2.0 (1 row) Y ademas el null vale tambien para max: cdrs=> select max(case when mes=1 then precio else null end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); max - 3.0 (1 row) E incluso para avg, sum y count: cdrs=> select avg(case when mes=1 then precio else null end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); avg 2.5000 (1 row) cdrs=> select count(case when mes=1 then precio else null end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); count --- 2 (1 row) cdrs=> select sum(case when mes=1 then precio else null end) from ( values(1,2.0),(1,3.0),(2,1.0),(2,4.0)) as datos(mes,precio); sum - 5.0 (1 row) Lo que te simplificaria bastante tu query, y lo deja, IMHO, mas claro, ya que en SQL el NULL se ve enseguida como 'falta dato' o 'dato desconocido' o 'no procede'. Incluso, aprovechando que el null propaga, puedes hacerlo en dos partes, primero sacas una columna con los datos de enero luego agregas. Como usas una version EOL no voy ni a intentar hacerte una prueba real que no se si funcionara, no voy a ir buscando documentaciones historicas, pero seria algo asi. Tabla extendida: SELECT cd.codigo as codigo, cd.cantidad as cant, preciocompra, (CASE WHEN extract(month from c.fecha_factura)=1 THEN cd.cantidad ELSE NULL END) AS cant_enero, (CASE WHEN extract(month from c.fecha_factura)=1 THEN cd.preciocompra ELSE NULL END) AS precio_enero FROM compras cd inner join compra c on cd.idcompras=c.idcompras WHERE trim(cd.codigo)='90-131-00-1' and c.fecha_factura>='2015-01-01' Y luego puedes agregar con eso: select codigo, sum(cant) as cant, min(preciocompra) as min_precio, max(preciocompra) as max_precio, sum(cant_enero) as cant_enero, min(precio_enero) as min_precio_enero, max(precio_enero) as max_precio_enero, sum(precio_enero*cant_enero)/sum(precio_enero) as media_enero FROM (** LO DE ARRIBA**) as extendida GROUP BY codigo. ** > Trabajo con porstgres 9.0 Esa version esta EOL, yo que tu iria mirando de actualizar. De hecho el query de ejemplo te lo hubiera puesto con WITH pero ni recuerdo si lo soportaba en esa version. 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] error en insert de \\\ con postgres 9.4
Buenas tardes. 2015-11-26 19:59 GMT+01:00 heriberto giron <heribertogir...@gmail.com>: > al parecer el campo que posee los datos separados por \\\ lo convierte a > \134 Sin ver mas datos, como como sacas el dato, que query mandas, que definicion de columna tienes, dificil es que te puedan ayudar. De todas maneras si en 9.0 te funcionaba y en 9.4 no, dado que en una cadena con escapes octales \134 es una \, y dado que entre esas dos versiones cambiaron el standard_conforming_strings yo me miraria la documentacion de ese parametro porque hay una forma de ponerlo para que los servidores de la 9.4 se comporten como los de la 9.0 ( lo que cambio fue el valor por defecto del parametro, no recuerdo todos los detalles pero estan en el manual ) y puede que eso resuelva tu problema inmediato. 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] libreria de funciones?
Kernel: 2015-11-16 12:25 GMT+01:00 Kernel <jucab...@gmail.com>: > Se puede ver en alguna tabla el codigo de las funciones? Dejando aparte el link que te han dado en stack overflow y el clasico 'RTFM' (http://www.postgresql.org/docs/9.4/static/catalog-pg-proc.html, pg_proc.prosrc y amiguetes ), para estos casos suele venir muy bien usar el psql con un '\set ECHO_HIDDEN on'. Con eso, si eres capaz de sacar el fuente de una funcion ( \df+ si no recuerdo mal ) o editarla ( \ef, IIRC ) puedes ver como lo hace y partir de ahi. 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] problema con codificacion
2015-11-13 21:53 GMT+01:00 Esneiker Enriquez Cabrera <eenriq...@cav.desoft.cu>: > Escribo porque estoy probando guardar información encriptada en la base de > datos con codificación utf8 y todo resulta bien, excepto cuando la > información tiene caracteres especiales, se guarda basura. > A continuación les pongo un ejemplo. > select > encode(decrypt(encrypt('telefónico','password','3des'),'password','3des'::text), > 'escape'::text); > el resultado que me retorna es “telef\303\263nico”, en lugar de telefónico. > Espero que me puedan indicar cómo hacer el tratamiento correcto. Esto huele a lo de siempre, UTF-8 es una forma de codificar texto en bytes, la criptografia va en bytes, tenemos el encoding de la base de datos por un lado, nos hemos liado.etc etc... No te lo puedo asegurar, pero el hecho de que necesites encode ya te da una pista. Encrypt toma bytea como datos, PEEERO, tu le has dado un texto fiandote de la conversion por defecto, decrypt devuelve bytea. Luego coges y le dices que te lo imprima en escape, y lo hace bien, de hecho : cdrs=> show client_encoding; client_encoding - UTF8 (1 row) cdrs=> select encode('telefónico', 'escape'); encode --- telef\303\263nico (1 row) El problema es que el decrypt/encrypt es el equivalente a pasat telefónico a bytea: cdrs=> select 'telefónico'::bytea; bytea -- \x74656c6566c3b36e69636f (1 row) cdrs=> select encode('telefónico'::bytea, 'escape'); encode --- telef\303\263nico (1 row) Y lo que tu quieres es que te interprete esos bytes como utf8, no que te los imprima escapados, para eso necesitarias una funcion de conversion de bytes a string, como por ejemplo: cdrs=> select convert_from('telefónico'::bytea, 'UTF-8'); convert_from -- telefónico (1 row) No te lo puedo probar porque no tengo instaladas las crypto, pero juraria que es eso. Por cierto, si lo es tu codigo tiene un problema, que dejas la conversion de texto a bytea a merced del encoding de la conexion y otroas cosas, lo que no es recomendable, particularmente en criptografia. Probablement tus problemas vienen de que la conversion no es reversible: cdrs=> select 'telefónico'::bytea::text; text -- \x74656c6566c3b36e69636f (1 row) Las cosas te iran mejor/mas simples, si al igual que apareas encrypt/decrypt haces lo mismo con convert_from, convert_to, asi te aseguras de que lo hace en el encoding que tu le dices independientemente de la conexion: cdrs=> select convert_from(convert_to('telefónico','UTF-8'), 'UTF-8'); convert_from -- telefónico (1 row) Que funciona con otros encoding ( que soporten los caracteres que usas ): cdrs=> select convert_from(convert_to('telefónico','LATIN-1'), 'LATIN-1'); convert_from -- telefónico (1 row) A pesar de que: cdrs=> values(convert_to('telefónico','LATIN-1'), 'LATIN-1') union values(convert_to('telefónico','UTF-8'), 'UTF-8'); column1 | column2 --+- \x74656c6566c3b36e69636f | UTF-8 \x74656c6566f36e69636f | LATIN-1 (2 rows) Si haces esto se ve la simetria, select(convert_from(decrypt(encrypt(convert_to.. no te fies nunca de las conversiones por defecto cuando estas usando bytea, siempre se revuelven y te muerden donde menos lo esperas. Saludos. 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] Desactivar y activar un trigger o constraint desde sentencia SQL
2015-10-26 9:44 GMT+01:00 Carlos Joaniquet <cjtam...@yahoo.es>: > Perfecto y nunca pensé que sería un ALTER TABLE. Si te miras la pagina del alter trigger ( sitio tipico para buscarlo ), te lo dice, asi como la razon: Notes The ability to temporarily enable or disable a trigger is provided by ALTER TABLE, not by ALTER TRIGGER, because ALTER TRIGGER has no convenient way to express the option of enabling or disabling all of a table's triggers at once. ( por si alguien no lee ingles 'La capacidad de habilitar o deshabilitar temporalmente un trigger esta en alter table, no el alter trigger, porque no hay una forma conveniente de expresar la opcion de habilitar o deshabilitar todos los triggers de una tabla a la vez con alter trigger ( ya que esta sentencia va condicionada al nombre del trigger, añado ) ) 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] Desactivar y activar un trigger o constraint desde sentencia SQL
2015-10-25 2:07 GMT+01:00 Carlos Joaniquet <cjtam...@yahoo.es>: > A programa cliente me refiero a un programa de gestión que se conecta a la db > para obtener y volcar información y desde donde quiero hacer alguna tarea en > la que en un momento determinado necesito desactivar por ejp un trigger. El > programa para actualizar info hace UPDATE o DELETE y para obtenerla SELECT. > ¿Qué intrucción se manda para activar-desactivar un trigger o una > restricción? Ahora lo hago con pgAdmin manualmente. Veamos. Conozco el pgAdmin, aunque no lo uso nunca porque dificulta mucho la administracion ( por lo menos en mi forma de trabajar, yo soy verbal y ademas tiro del manual de postgres que tiene casi todos los ejemplos para psq ). La diferencia con un programa como el psql, es de interfaz de usuario mayormente, la del psql es poco mas que mandar al servidor lo que tecleas mientras que la del pgadmin es mucho mas compleja, con menus y tal, pero puede ir mejor en segun que casos. No tengo ni idea de como desactiva los triggers, supongo que con algun menu o algo asi en la visualizacion, pero el SQL para hacerlo viene en el manual ( Y ya te han mandado un link por ahi ), y al final tiene que hacerlo mandado sql al servidor. Casi seguro que tiene alguna opcion para ver los comandos que le manda al servidor. Si te encuentras comodo con el yo te recomendaria que la buscases y mirases que comando usa cuando los deshabilitas usandolo, y no tienes mas que repetirlo. Normalmente suelen ser cosas tipo alter table, que a efectos de mandarlo desde otra aplicacion es lo mismo que mandar un update ( de hecho probablemente podras mandarlo desde el pgadmin en la ventana que tenga de sql ). > Me espero a actualizar. Por ahora va todo perfecto. Mu bien, aunque igual esperas un rato. No se tu pero yo en general no suelo poner las *.*.0, me espero a la primera revision, aunque si no sale en unos meses la pongo. 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] Consulta que no tome en cuenta las tildes
2015-10-25 0:29 GMT+02:00 Horacio Miranda <hmira...@gmail.com>: > https://wiki.postgresql.org/wiki/SoundexESP Eso si que te puede valer, pero eso NO es el soundex, ya podrias haber puesto el link al principio y nos hubieramos ahorrado unas explicaciones. ( de hecho esta bastante currada, ya que parece que quiere ir a palabras en general ). Tiene un par de problemas para lo que parece querer, eliminar tildes, originados por ser una imitacion del soundex ( y que comparte con este ), que ignora las vocales y que ignora todo lo que vaya detras de la cuarta silaba, pero segun lo que quieras puede ser hasta mejor, como lo del FTS que se sugirio. Un poco larga, pero si se mete un indice funcional le da igual. 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] Consulta que no tome en cuenta las tildes
2015-10-24 14:07 GMT+02:00 Hellmuth Vargas <hiv...@gmail.com>: > Y porque no considerar FTS? Normalmente es una buena solución, si no te importan los falsos positivos ( porque me temo que te pueda devolver cosas como metodos, metodico y/o metodologia, ahora no tengo forma de probarlo ) y que el indice te salga algo mayor ( si no recuerdo al lo eran, pero no creo que importe si usas la flexibilidad que te da ). No conociendo bien el problema, yo creo que es lo mejor, y con lo que se dijo yo optaria probablemente por FTS+app filtering si hay algun falso positivo. ( habiendolo sugerido tu con anterioridad yo me limite a indicar como se hace para indexar sin acentos por si no queria FTS ) 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] Consulta que no tome en cuenta las tildes
Un poco fuera de topico. No se como se traduce 'top posting' al castellano, y soy un poco nuevo en esta lista, pero es ¿costumbre por aqui ? 2015-10-24 14:01 GMT+02:00 Horacio Miranda <hmira...@gmail.com>: > Soundex es para eso, si lo quieres usar bien, de lo contrario debes hacer un > indice con todas las variantes que se te puedan imaginar. Soundex, si no recuerdo mal ( y si knuth ya la wikipedia se equivocan, ya que PSLM lo mire antes de contestarte la primera vez ), se invento para los nombres de la gente en ingles, no para textos genericos en cualquier idioma ( por eso descarta las vocales asi como "yhw" que no suelen dar mucha informacion ). El primer problema, tildes aparte, es que te va a dar lo mismo para metodo, metida, matado, medida, ... Lo he usado, y nisiquiera funciona bien para los nombres en castellano ( donde en general no suele ser necesario, dado que la pronunciacion es muy directa, normalmente con omitir tildes vas sobrao ). No tienes que hacer un indice con todas las variantes si quieres solo quitar tildes. Tienes que hacer un indice funcional y consultar por la funcion. Igual que para hacer una consulta que no distinga mayusculas de minusculas no hay que indexar or todas las variaciones, vale por indexar por la palabra en mayusculas y preguntar por la palabra en mayusculas. 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] duda sobre indices
Buenos dias: 2015-10-22 22:44 GMT+02:00 Igniris Valdivia <ivaldi...@xetid.cu>: > tengo un indice btree que contiene dos campos digamos id1 e id2 pues se debe > garantizar la unicidad de la combinacion de estos campos > ahora en la consulta donde la uso se usan los operadores igual e IN como por > ejemplo: > > id1=id3 AND id2 IN (1,2,3) > > y como el indice es compuesto la busqueda del IN la hace secuencial > que pudiera hacer para arreglar eso sin tener que crear un nuevo indice solo > para el capo id2 pues considero que esto ralentizaria aun mas la consulta en > lugar de optimizarla Como ya te han dicho, un explain analyze ayudaria. Añadire que ademas la definicion real de las tablas/indices es necesaria, el optimizador es un bicho complicado y diferencias pequeñas en las definciones pueden dar grandes diferencias en los resultados. ¿ Cuando dices que la busqueda la hace secuencial a que te refieres exactamente ? ¿ Secuencial en el resultado de buscar id1, en toda la tabla ? Dicho esto, en general un indice por (id1, id2) te vale para buscar por id1 o por ambos, pero no por id2. En tu caso puede que el opitmizador no llegue a entender todo el query, y a veces puedes mejorarlo pidiendo (id1=id2) and (id2=1 or id2=2 or id2=3), todo es cuestion de probar. 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] Consulta que no tome en cuenta las tildes
2015-10-22 22:37 GMT+02:00 Horacio Miranda <hmira...@gmail.com>: > Por que no usar soundex ? > http://www.postgresql.org/docs/9.1/static/fuzzystrmatch.html ¿ Porque, segun el primer parrafo de la pagina a la que apuntas "The Soundex system is a method of matching similar-sounding names by converting them to the same code. It was initially used by the United States Census in 1880, 1900, and 1910.>>>> Note that Soundex is not very useful for non-English names.<<<<<" y el uso de tildes implica non-English names ? AFAIK el soundex NO esta definido si hay tildes y tira todas las vocales no iniciales. Yo en esos casos siempre he optado por hacer un folding si se conoce el alfabeto de entrada, algo como [select translate('Método', 'áéíóúñ','aeioun');]. Si se encapsula eso en una funcion SQL marcada como "strict inmutable" se puede hacer un indice por esa expresion y usarla en los queries ( si se hace cuidado, no se puede cambiar la funcion despues de crear el indice, por algo se marca immutable, hay que reindexar ). Yo he usado eso para cambiar las cosas mas habituales del latin1 a ascii ( la db era utf8, pero como los usuarios venian de windows, uno de los pocos SO que es unicode por dentro, los datos usaban solo, como es habitual, caracteres presentes en win1252), ya que tenia un problema similar. 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] Desactivar y activar un trigger o constraint desde sentencia SQL
Buenos dias: 2015-10-24 0:03 GMT+02:00 Carlos Joaniquet <cjtam...@yahoo.es>: > Me gustaría saber si desde un programa cliente puedo desactivar y activar un > trigger o constraint desde sentencia SQL para realizar alguna tarea de > mantenimiento. ¿ A que le llamas un programa cliente ? El psql es un prgrama cliente, el pgadmin otro y una aplicacion en java usando JDBC, p.e., otro. Todos se comunican con la BD por un socket, al servidor le da igual. De hecho el pgrestore es otro programa cliente que hace cosas de esas mientras restaura, y las hace de la misma forma que cualquier otra aplicacion, mandando cosas por un socket. > Por otro lado, a nivel informativo y que nada tiene que ver, si todo me va > como un tiro, me conviene pasar de versión 9.1 a 9.3? Hay que hacer muchos > cambios? Yo te recomendaria, si te vas a liar, pasar a la 9.4 ( que ya esta mas testeadita y te dara mas tiempo antes de ser declarada fuera de soporte ) ( o esperar a la 9.5 ). Yo cambie de 9.1 a 9.3 sin problemas ( solo la ventana de mantenimiento para tener tiempo a hacer dump/restore ). Lo que es mas critico en estas cosas suele ser si puedes parar el sistema un rato para mover las cosas con calma, es decir, dependes del tamaño de la BD mas que otra cosa, sin saber el tiempo que tardarias en hacerlo y la posibilidad de parar es dificil recomendar naa. Si tu setup te lo permite intenta restaurar un backup en una maquina de pruebas y probar las aplicaciones, asi como medir el tiempo que tardas en hacer un backup + restore, y aprendete como hacer restores rapidos ( lo clasico, minimo log, fsync off, buena cantidad de buffers porque solo hay un proceso tocando ). 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] Ayuda sobre consulta!!!!
Flavio: 2015-10-22 14:58 GMT+02:00 Flavio Roche <fero...@uci.cu>: > Les escribo porque tengo la siguiente problemática, tengo una tabla persona > la cual cuenta con la siguiente estructura > CREATE TABLE persona > ( > pasaporte integer, > nombre text, > calificacion integer, > fecha text, > acumula boolean > ) > > Y pongo un ejemplo de los datos que tengo almacenados en la misma > > pasaportenombre calificacion fecha > acumula > 1 Pepe 4 12/10/2015 > t > 2 Jose 513/10/2015 > f > 1 Pepe 312/11/2015 > t > 3 Ramon 5 14/10/2015 > t > 2 Jose 313/11/2015 > f > Necesito hacer una funcion que se le pase por parámetro un rango de fecha, y > calcule la calificación promedio de las personas en ese intervalo de tiempo > en caso de que el parámetro acumula tenga valor true y en caso que no > acumule, la última calificación obtenida. Ejemplo de la salida deseada > al llamar ejecutar la funcion.. > Select * from consulta('01/10/2015','25/11/2015') > > 1 Pepe3.5 (acumula) > 2 Jose 3 (No acumula) > 3 Ramon 5 (Acumula) Aqui le veo un problema gordo, tu tabla parece estar desnormalizada y sin restricciones ( es decir, Jose podria tener pasaportes 2 y 22 , y pepe podria tener acumula t y f, y Ramon pasaporte y acumula a null. Esto hace que la funcion sea enormemente compleja. Para reducirlo un poco te comento sobre una estructura equivalente pero normalizada en dos tablas, persona ( pasaporte primary key, nombre not null, acumula not null) y calificaciones ( pasaport foreign key references persona, calificacion not null, fecha not null). Otro problema gordo es que metes FECHA como texto, malo, y encima en DD/MM/, peor ( los que venimos de la epoca de las tarjetas, y ademas seguimos usando archivos de texto plano, sabemos que las fechas es mejor guardarlas como numeros de 8 digitos o textos de 8 o 10 caracteres pero con la forma (A*100+M)*100+D o '/MM/DD' para que el sort natural del campo ordene por fecha automaticamente. Supondre tambien que puedes corregir eso. En ese caso con una funcion en cualquier lenguage no es dificil ( no hay mas que hacer dos select ordenados o con joins y barrer), incluso con las funciones de ventana creo que se podria hacer en un solo query. Para eso usas un truco tipico, que es empezar por calcular las dos cosas en la tabla de calificaciones, la media es facil, avg(calificacion*1.0), o avg(calificacion::real) ( otro problema en tu modelo de datos calificacion es integer pero la media la quieres con decimales ). el ultimo valor creo que se saca con last_value(calificacion) over (group by fecha, order by fecha), o algo asi, no tengo accesible donde probarlo en este momento pero no deberia ser dificil. Supongamos que tu query es: select pasaporte, avg(calificacion::real) as media, last_value(calificacion::real) over ( group by pasaporte order by fecha) as ultima from calificaciones group by pasaporte Ya solo tienes que hacer un join con personas para sacar las cosas. Con un CTE es facil: with aux as ( select pasaporte, avg(calificacion::real) as media, last_value(calificacion::real) over ( group by pasaporte order by fecha) as ultima from calificaciones group by pasaporte ) select per.pasaporte, per.name, case when per.acumula then media else ultima end, case when per.acumule then "(acumula)" else "(No acumula)" end from aux, personas per where aux.pasaporte = per.pasaporte order by pasaporte Esto seria mas o menos si normalizas las tablas y usas fechas. Si no puedes hacer algo similar con tu tabla original en varios pasos( usando CTE o select sobre select sobre select), empieza por seleccionar un to_date del fecha, para tener los ordenes correctos. Sobre este resultado haz el equivalente al primer query, pero añade los valores de nombre y pasaporte ( usa max(nombre), max(pasaporte), p.e., ya que es un query agregado, sobre este ultimo haz el case para formatear / seleccionar. Una vez que los tengas todos puedes simplificarlo a un unico query, pero te saldra complicado. 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