From: | "Mario Soto Cordones" <mario(dot)soto(dot)cordones(at)gmail(dot)com> |
---|---|
To: | "'Juan'" <smalltalker(dot)marcelo(at)gmail(dot)com>, "'Ayuda'" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: guardar campos bytea |
Date: | 2012-06-05 17:21:42 |
Message-ID: | 4fce402c.644cec0a.72c4.5c75@mx.google.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Mira como lo hago yo, espero te sirva
# Contenido del archivo
$fp = fopen($tmp_name, "rb");
$buffer = fread($fp, filesize($tmp_name));
fclose($fp);
# Descripción de la foto o archivo.
$desc = $_POST["desc"];
$isoid=$_POST['tipo']=='oid'?true:false;
if(!$isoid){
# Escapa el contenido del
archivo para ingresarlo como bytea
$buffer=pg_escape_bytea($buffer);
$sql = "INSERT INTO
foo(nombre, descripcion, archivo_bytea, mime, size)
VALUES ('$nombre', '$desc', '$buffer', '$type', $size)";
}
else{
# Inicia una transacción
pg_query($link, "begin");
# Crea un objeto blob y
retorna el oid
$oid=pg_lo_create($link);
$sql = "INSERT INTO
foo(nombre, descripcion, archivo_oid, mime, size)
VALUES ('$nombre', '$desc',
$oid, '$type', $size)";
}
# Ejecuta la sentencia SQL
pg_query($link, $sql) or
die(pg_last_error($link));
if($isoid){
# Abre el objeto blob
$blob=pg_lo_open($link,$oid,"w");
# Escribe el contenido del
archivo
pg_lo_write($blob,$buffer);
# Cierra el objeto
pg_lo_close($blob);
# Compromete la transacción
pg_query($link, "commit");
}
$msg="Archivo guardado";
}
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Juan
Enviado el: martes, 05 de junio de 2012 12:48
Para: Ayuda
Asunto: [pgsql-es-ayuda] guardar campos bytea
Hola gente
Tengo que guardar unos campos binarios en un campo bytea. en verdad estoy
importando desde un archivo access
y el campo del access viene como image, equivalente a nuestro bytea.
Ahora bien, intento entender como se haria segun lo que entendi de la
documentacion podria hacerlo de la sig manera:
1) cada byte escapearlo y ponerlo en 3 digitos en formato octal o sea ej.
el byte a codificar es 7F (hexadecimal) me quedaria //177
NOTA: no es necesario escapear todos los caracteres pero tampoco esta
prohibido (deberia escapear los no imprimibles etc).
2) por cada byte podria usar el /x escape ( modo hexa) fijense que parece
mas compacto o sea el 7F del caso anterior
quedaria /x7F y listo (1 byte menos sin contar que el cero /x0 ahorra
mas.)
AHORA,, es correcto esto?
si fuese correcto supongo que sin importar como lo importe que formato
deberia quedar lo mismo en el campo,no?
siempre todos los inserts los hago con E'/xxx' ::bytea conversion de string
escapeado a bytea.
Cualquier comentario sera agradecido
saludos
JMDC
From | Date | Subject | |
---|---|---|---|
Next Message | Juan | 2012-06-05 17:28:31 | Re: guardar campos bytea |
Previous Message | Alvaro Herrera | 2012-06-05 17:20:04 | Re: guardar campos bytea |