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-ow...@postgresql.org
[mailto:pgsql-es-ayuda-ow...@postgresql.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

 

 

 

 

 

Responder a