Re: [pgsql-es-ayuda] Conversion UTF8 - WIN1252 en campos binarios ?

2010-05-28 Por tema Conxita Marín

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

2010-05-28 Por tema Fernando Siguenza

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

2010-05-28 Por tema Guillermo Villanueva
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

2010-05-28 Por tema Julio Cesar Rodriguez Dominguez
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 ?

2010-05-28 Por tema alvherre
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-05-28 Por tema Jaime Casanova
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

2010-05-28 Por tema Guillermo Villanueva
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

2010-05-28 Por tema alvherre
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

2010-05-28 Por tema MOLINA BRAVO FELIPE DE JESUS
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

2010-05-28 Por tema Fernando Siguenza

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

2010-05-28 Por tema Gerardo Herzig
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-05-28 Por tema Marco Antonio
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 ?

2010-05-28 Por tema Walter Negro
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