Re: Como puedo guardar archivos binarios en una tabla de una BD Postgresql

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Victor Montenegro Isidin <vhmontenegro(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Como puedo guardar archivos binarios en una tabla de una BD Postgresql
Date: 2005-07-22 01:52:36
Message-ID: 20050722015236.GA8997@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Thu, Jul 21, 2005 at 08:00:57AM -0400, Victor Montenegro Isidin wrote:

> Necesito guardar en una tabla de una BD postgres archivos binarios, es
> decir, archivos .zip .jpg .doc, etc.
> Como puedo subirlos a una BD Postgresql (con PHP)

Resumiendo todas las respuestas que dieron, tienes 4 opciones:

1. almacenar el archivo fuera de la base de datos, y almacenar solamente
el PATH. No es mala opcion, pero necesitas un programa externo que haga
limpieza.

2. almacenar usando "large objects".

3. almacenar usando el tipo Bytea. Ventaja: tienes que hacer una
conversion al insertar y extraer, puesto que hay que escapar los
caracteres "ascii 0" (NUL), backslash y otros (AFAIR el unico otro es la
comilla simple). Alternativamente puedes usar un mecanismo que no
necesite escapar, pero entiendo que no esta implementado en PHP.

4. almacenar usando el tipo text, codificado en base64 o algun
equivalente. Desventaja: hay un consumo de CPU no despreciable para
hacer la conversion (mas costosa que la alternativa 3)

Con respecto a Bytea y Text, podria ser recomendable desactivar la
compresion de esa columna, para ahorrar algo de CPU, dependiendo de si
los archivos que almacenes sean muy compresibles (es una variante de
ALTER TABLE que dice algo de "STORAGE". Lee el manual.)

Con respecto a la alternativa 2, es lo que hay en un articulo que habla
sobre almacenar BLOBs en Postgres que citaba otra persona. Nota que en
Postgres no existen los "blobs"; aca el equivalente es el tipo Bytea,
apocope de "byte array". Ademas el autor del articulo comete el error
de confundir eso con la interfaz de objetos grandes, que es un tema
completamente distinto.

Tu tienes que decidir cual de esas alternativas escoger. Una vez que
hayas escogido te preocupas de ver exactamente como es el codigo para
hacerlo.

--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"Nunca se desea ardientemente lo que solo se desea por razón" (F. Alexandre)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-07-22 01:53:31 Re: ERROR: fmrg_info:Function 16556: cache lookup filed
Previous Message Julio Rivero 2005-07-21 23:49:44 Re: odbc postgresql 8.0 windows