RE: guardar campos bytea

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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