Re: [pgsql-es-ayuda] Conversion UTF8 - WIN1252 en campos binarios ?
Hola. Nosotros tuvimos el mismo problema, usabamos unos campos bytea para almacenar código binario. Es la misma situación: base de datos UTF8 y programa C que accede con la codificación WIN1252 a través de libpq. Nosotros salvamos la situación, almacenando los datos en formato hexadecimal en campos varchar y para recuperar/guardar desde el programa C se usarón las funcíones sprintf y scanf para convertir a binario y al revés. Saludos. Conxita Marín Desarrollos Informáticos Modulares de Software, S.L. http://www.dims.com - Original Message - From: Walter Negro wne...@vstour.com To: alvherre alvhe...@commandprompt.com Cc: pgsql-es-ayuda pgsql-es-ayuda@postgresql.org Sent: Friday, May 28, 2010 12:06 AM Subject: Re: [pgsql-es-ayuda] Conversion UTF8 - WIN1252 en campos binarios ? Álvaro, Ahora le pasé el OID al parámetro bytea. Según consulté en pg_type, el oid de bytea es 17. Pero sigo obteniendo el mismo mensaje de error: ERROR: carácter 0x81 de codificación «WIN1252» no tiene equivalente en «UTF8» Agrego que el parámetro paramFormats de PQexecParams, es NULL, indicando que todos los parámetros son texto. La solución no debería pasar por pasar el bytea en formato binario (binario en el formato de almacenamiento del servidor), que incluso creo que sólo está soportado para datos escalares. Walter Negro Walter Negro escribió: Álvaro, Justamente estoy casteando en la query para no usar OIDs, que es una recomendación de la documentación. Pero ahora mientras te contesto, entiendo donde podría estar el problema. Hago unas pruebas pasando el OID y les cuento. Gracias Walter Negro - 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 - 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] Ejecutar select dinamico
Amigos como estan, quiero ver si me pueden ayudar, estoy intentando eejcutar un select dinamico para lo cual uso el comando execute, de esta forma query1='open cmaximos for select datfec,max(tem1),max(hum1),max(dew1),max(tem2) from tmpres group by datfec'; execute query1; Aqui lo pongo directo la consulta ya que esa se arma dinamicamente pense que la estaba armando mal, y por eso le puse directo la consulta. Tengo declarado como variables a query1 de tipo varchar, y a cmaximos de tipo refcursor; Pero al querer probar esta funcion me da error justo en la linea de excecute y me dice error de sintaxis en o cerca de «open» Pero ya probe ejecutando el comando directo en la misma funcion y ahi si funciona correctamente. Como podria hacer para ejecutar este comando, Saludos _ Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! http://spaces.live.com/spacesapi.aspx?wx_action=createwx_url=/friends.aspxmkt=en-us
[pgsql-es-ayuda] COPY FROM
Hola gente, cómo están? Quería saber si hay alguna posibilidad de filtrar (horizontal y verticalmente) los datos de un .TXT my grande al copiarlos con COPY. De unas 360mil líneas hay unas 120mil que no quiero copiar (puedo detectarlas por un valor de columna), y hay dos columnas que tampoco quiero. Voy a tener que hacer el copy completo a una tabla intermedia y después otro de tabla a tabla ? ¿Recomiendan el uso de tablas particionadas para manejar tablas que crecen al mes unas 200mil tuplas (una vez al mes se agregan en batch)? Desde ya muchas gracias. Guillermo
Re: [pgsql-es-ayuda] Ejecutar select dinamico
El 28 de mayo de 2010 08:44, Fernando Siguenza fs...@hotmail.com escribió: Amigos como estan, quiero ver si me pueden ayudar, estoy intentando eejcutar un select dinamico para lo cual uso el comando execute, de esta forma query1='open cmaximos for select datfec,max(tem1),max(hum1),max(dew1),max(tem2) from tmpres group by datfec'; execute query1; Debes usarlo así: open cmaximos for EXECUTE 'select datfec,max(tem1),max(hum1),max(dew1),max(tem2) from tmpres group by datfec';
Re: [pgsql-es-ayuda] Conversion UTF8 - WIN1252 en campos binarios ?
Excerpts from Walter Negro's message of vie may 28 08:00:09 -0400 2010: Álvaro, Hice nuevas pruebas y decidí enviar el dato bytea configurado como binario. Según la documentación, el parámetro paramLengths sólo es tomado en cuenta si el dato es enviado con formato binario. Algunas veces la documentación puede no ser exactamente lo que ocurre internamente por muchas razones, así que me puse a mirar el código de la libpq y encontré que si el parámetro no es pasado como binario, la librería calcula el largo del string usando la función strlen(). Por lo tanto, la única forma de pasar correctamente un dato binario a un campo bytea, que pueda contener caracteres nulos, es pasarlo justamente como binario. OK, eso es lo que sospechaba, gracias por confirmarlo. Así que la conclusión que saco es que los datos bytea hay que pasarlos configurados binario porque si no, el servidor puede hacer conversiones, además de ser la única forma de pasar datos binarios que contengan caracteres nulos. Supongo que la otra alternativa es escapar estos datos, usando \000 donde haya caracteres nulos. ¿Has probado usar la biblioteca libpqtypes? http://libpqtypes.esilo.com/ -- Álvaro Herrera alvhe...@commandprompt.com The PostgreSQL Company - Command Prompt, Inc. PostgreSQL Replication, Consulting, Custom Development, 24x7 support - 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] COPY FROM
2010/5/28 Guillermo Villanueva guillermo...@gmail.com: Hola gente, cómo están? Quería saber si hay alguna posibilidad de filtrar (horizontal y verticalmente) los datos de un .TXT my grande al copiarlos con COPY. De no unas 360mil líneas hay unas 120mil que no quiero copiar (puedo detectarlas por un valor de columna), y hay dos columnas que tampoco quiero. Voy a tener que hacer el copy completo a una tabla intermedia y después otro de tabla a tabla ? si ¿Recomiendan el uso de tablas particionadas para manejar tablas que crecen al mes unas 200mil tuplas (una vez al mes se agregan en batch)? quiza una particion por año aunque 2millones de registro tampoco es demasiado, valdria la pena saber si esos registros te seguiran sirviendo despues... porque si en dos años ya no necesitas los registros del 2010 vale pena tenerlo particionado para borrar esas particiones viejas (luego de sacarles respaldo claro) -- Jaime Casanova www.2ndQuadrant.com Soporte y capacitación de PostgreSQL - 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] COPY FROM
gracias Felipe... desgraciadamente esto es todo win, no tengo las herramientas que mencionas Saludos Guillermo Villanueva El 28 de mayo de 2010 05:50, MOLINA BRAVO FELIPE DE JESUS felipe.mol...@inegi.org.mx escribió: El vie, 28-05-2010 a las 11:34 -0300, Guillermo Villanueva escribió: Hola gente, cómo están? Quería saber si hay alguna posibilidad de filtrar (horizontal y verticalmente) los datos de un .TXT my grande al copiarlos con COPY. De unas 360mil líneas hay unas 120mil que no quiero copiar (puedo detectarlas por un valor de columna), y hay dos columnas que tampoco quiero. Voy a tener que hacer el copy completo a una tabla intermedia y después otro de tabla a tabla ? desde postregres esta dificil (podría asegurar que no se puede); desdel el s.o. puedes usar el awk ó grep (linux) saludos
Re: [pgsql-es-ayuda] COPY FROM
Excerpts from Guillermo Villanueva's message of vie may 28 10:34:43 -0400 2010: Hola gente, cómo están? Quería saber si hay alguna posibilidad de filtrar (horizontal y verticalmente) los datos de un .TXT my grande al copiarlos con COPY. De unas 360mil líneas hay unas 120mil que no quiero copiar (puedo detectarlas por un valor de columna), y hay dos columnas que tampoco quiero. Voy a tener que hacer el copy completo a una tabla intermedia y después otro de tabla a tabla ? Quizás pgloader te ayude algo http://pgloader.projects.postgresql.org/ Aunque no me parece que te permita saltarte ciertos valores en una columna. -- Álvaro Herrera alvhe...@commandprompt.com The PostgreSQL Company - Command Prompt, Inc. PostgreSQL Replication, Consulting, Custom Development, 24x7 support - 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] COPY FROM
El vie, 28-05-2010 a las 11:34 -0300, Guillermo Villanueva escribió: Hola gente, cómo están? Quería saber si hay alguna posibilidad de filtrar (horizontal y verticalmente) los datos de un .TXT my grande al copiarlos con COPY. De unas 360mil líneas hay unas 120mil que no quiero copiar (puedo detectarlas por un valor de columna), y hay dos columnas que tampoco quiero. Voy a tener que hacer el copy completo a una tabla intermedia y después otro de tabla a tabla ? desde postregres esta dificil (podría asegurar que no se puede); desdel el s.o. puedes usar el awk ó grep (linux) saludos - 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] Error en consulta: e l nombre de columna «max» fue especifica do más de una vez
Amigos como estan, tengo problemas en una funcionq ue estoy creando, aqui tengo que ir armando algunos selects dinamicos, y al querer ejecutar uno me sale este error: el nombre de columna «max» fue especificado más de una vez el select que se desea ejecutar es este: CREATE TEMPORARY TABLE tmpmaximos on commit drop as select datfec,0 as datnum,1 as dathor,max(tem1),max(hum1),max(dew1),max(tem2),max(hum2),max(dew2),max(tem3),max(hum3),max(dew3),max(tem4),max(hum4),max(dew4),max(tem5),max(hum5),max(dew5),max(tem6),max(hum6),max(dew6) from tmpres group by datfec Cual puede ser el motivo del error??? Saludos. Fernando _ Discover the new Windows Vista http://search.msn.com/results.aspx?q=windows+vistamkt=en-USform=QBRE
Re: [pgsql-es-ayuda] castear variable tipo RECORD a TEXT[]
alvherre wrote: Excerpts from Gerardo Herzig's message of mié may 26 18:04:22 -0400 2010: Hola a todos. No estoy pudiendo castear correctamente una variable RECORD a un array. Estoy escribiendo un trigger, y me gustaria guardar NEW (y OLD) en forma de vectores. Hay alguna manera de hacerlo en plpgsql (quiero decir, sin recurrir a contribs)? ¿Por qué no guardas el registro completo serializado a texto, en vez de procesar atributo por atributo? alvherre=# create table gerardo (a int, b text, c timestamp); CREATE TABLE alvherre=# create function serializa(gerardo) returns text language plpgsql as $$ begin return $1::text ; end $$; CREATE FUNCTION alvherre=# insert into gerardo values (1, 'gerardo', now()); INSERT 0 1 alvherre=# insert into gerardo values (2, 'herzig', now()); INSERT 0 1 alvherre=# select serializa(gerardo.*) from gerardo; serializa -- (1,gerardo,2010-05-27 21:06:54.526301) (2,herzig,2010-05-27 21:06:59.989333) (2 filas) Me imagino que debe poder hacerse con NEW y OLD también ... alvherre=# create or replace function trig() returns trigger language plpgsql as $$ begin raise notice '%' , NEW::text; return NEW; end ; $$; CREATE FUNCTION alvherre=# create trigger gerardo_trig before insert on gerardo for each row execute procedure trig(); CREATE TRIGGER alvherre=# insert into gerardo values (3, 'fmed', now()); NOTICE: (3,fmed,2010-05-27 21:10:18.286279) INSERT 0 1 Esto lo puedes expandir en columnas con * como harías con un registro de una tabla: alvherre=# select ('(3,fmed,2010-05-27 21:10:18.286279)'::gerardo).*; a | b | c ---+--+ 3 | fmed | 2010-05-27 21:10:18.286279 (1 fila) Esto funciona para un trigger genérico: alvherre=# create table logtable (tabla text, registro_new text); CREATE TABLE alvherre=# create or replace function log_trig () returns trigger language plpgsql as $$ begin insert into logtable (tabla, registro_new) values (tg_relname, new::text); return new; end ; $$; CREATE FUNCTION alvherre=# create table franco (a numeric, b inet, c timestamp with time zone); CREATE TABLE alvherre=# create trigger franco_trig before insert on franco for each row execute procedure log_trig(); CREATE TRIGGER alvherre=# create trigger gerardo_trig before insert on gerardo for each row execute procedure log_trig(); CREATE TRIGGER alvherre=# insert into gerardo values (3, 'fmed', now()); INSERT 0 1 alvherre=# insert into franco values (42, '192.168.0.3', now()); INSERT 0 1 alvherre=# select * from logtable; tabla | registro_new -+-- gerardo | (3,fmed,2010-05-27 21:16:30.573531) franco | (42,192.168.0.3,2010-05-27 21:17:02.494054-04) (2 filas) Y puedes expandirlo de esta forma: alvherre=# select tabla, (registro_new::gerardo).* from logtable where tabla = 'gerardo'; tabla | a | b | c -+---+--+ gerardo | 3 | fmed | 2010-05-27 21:16:30.573531 (1 fila) No creo que se pueda poner un cast dependiendo del valor de la primera columna, pero creo que con eso tienes bastante de lo que querías hacer. A todo esto, ¿alguna razón para no usar tablelog de pgfoundry? Hola. Gracias por tu tiempo. Supongo que tendre algunos problemas extras, debido a que no podre hacer la expansion en forma directa p.e. alvherre=# select tabla, (registro_new::gerardo).* from logtable where tabla = 'gerardo'; Pues estare auditando multiples tablas (la clausula `where' no sera por tabla, sino por usuario/periodo de tiempo). Pero supongo que podre hacer algo con querys dinamicos. Muy util tu ejemplo, muchas gracias por el trabajo que te tomaste! Probare y vere como me trata. Gracias de nuevo! Gerardo - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda
[pgsql-es-ayuda] Re: [pgsql-es-ayuda] Error en consulta: el nombre de columna «max» fue especificado más de una vez
2010/5/28 Fernando Siguenza fs...@hotmail.com: Amigos como estan, tengo problemas en una funcionq ue estoy creando, aqui tengo que ir armando algunos selects dinamicos, y al querer ejecutar uno me sale este error: el nombre de columna «max» fue especificado más de una vez Le falta el alias a cada columna que tengas en la consulta. En un SELECT «normal» no importa tanto el alias, pero al crear una tabla a partir de ése SELECT no podrá crearla si dos o más columnas tienen el mismo nombre. Saludos y abrazos... Marco Antonio Frias Butrón Desarrollador de Software Fundación INFOCAL Cochabamba ~ Cochabamba-Bolivia Empowerment Ltda. ~ Cochabamba-Bolivia Slackware ~ Linux User #356229 - 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] Conversion UTF8 - WIN1252 en campos binarios ?
Gracias Álvaro por la ayuda y voy a tener en cuenta la librería libpqtypes, especialmente porque yo arranqué directamente con la 8.4, así que no tengo ninguna necesidad de compatiblidad. Gracias Walter Negro alvherre escribió: ¿Has probado usar la biblioteca libpqtypes? http://libpqtypes.esilo.com/ - 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