Hola Señores, otra vez por aqui necesitando de su apoyo. Bueno les comento:
Estoy desarrollando un pequeño aplicativo web con JSP, el cual consiste en 
llevar el control de unos informes hechos en auditoria; para esto registrare 
todos los datos requeridos y ademas por requerimiento deberia tener la opcion 
de guardar archivos si fuera necesario. En primera instancie pense en guardar 
estos archivos en base de datos ya que estos no excederian los 2 Mb, por eso es 
que lanze anteriormente la pregunta de cuanto soportaba en tamaño un campo del 
tipo bytea. Entonces para esto cree una clase que es donde llamo a una funcion 
la cual detallo a continuacion:

public String uploadFileInforme(String num_informe, InputStream file, 
size_file) throws Exception
    {
        String mensaje = null;
        Connection con = null;
        CallableStatement cs = null;
        try{
            con = BD.conectar();
            con.setAutoCommit(false);
            String query = "{? = call auditoria.inserta_file_informe(?,?,?,?)}";
            cs = con.prepareCall(query);
            cs.registerOutParameter(1, java.sql.Types.VARCHAR);
            cs.setString(2,num_informe.toUpperCase());
            cs.setBinaryStream(3,file,size_file);
            cs.execute();
            mensaje = cs.getString(1);
            if(mensaje.equals("OK")){
                con.commit();
                con.setAutoCommit(true);
            }
        }catch(Exception ex){
            mensaje = ex.getMessage();
        }finally{
            try{
                if (cs != null)  cs.close();
                if (con != null) con.close();
            }catch(SQLException esql){
                mensaje = esql.getMessage();
            }
        }
        return mensaje;
    }


y luego la funcion escrita en plpgsql seria:

Create or Replace Function auditoria.inserta_file_informe(varchar, bytea)
Returns Text As
$body$
Declare
    mensaje varchar(5);
    id numeric(16,0);
    fecha_registro date;    
Begin
    id = 0;
    fecha_registro = now();    
    Select id_file into id from auditoria.file_informe order by id_file DESC 
limit 1;
    id = id + 1;
    Insert Into 
auditoria.file_informe(id_file,cod_informe,file_informe,fec_reg) 
Values(id,$1,$2,fecha_registro);    
    If Not Found Then        
        Raise Exception 'Error al tratar de guardar el archivo';
    Else    
        mensaje = 'OK';        
    End If;
    return mensaje;
End;
$body$
Language 'plpgsql';

En base ha esto, tengo las siguiente dudas:

        * Es correcto crear una funcion y enviar la data del archivo como 
parametro que es como lo estoy haciendo?? (sino, alguna sugerencia)

        * Cuando ejecuto esto llega un punto en donde el servidor se me queda 
colgado, tendria que configurar algo adicional en postgres??He estado 
intentando de diferentes forma hacer esto pero no he encontrado la solucion, 
alguno de Ud. talvez haya trabajado de esta forma y me pueda dar alguna 
sugerencia.

Adcionalmente les comento que el servidor postgres lo tengo en una PC dentro de 
mi LAN y accedo a travez de una IP de forma remota.

De antemano agradezco la atencion prestada.

Salñudos.


________________________________
De: Alvaro Herrera <[email protected]>
Para: Brando <[email protected]>
CC: [email protected]
Enviado: martes, 12 de mayo, 2009 13:52:56
Asunto: Re: [pgsql-es-ayuda] Consulta - Guardar Archivo en Postgres

Brando escribió:
> Hola Amigos de la lista.
> Recurro a la experiencia de muchos, por una duda que tengo al querer
> almacenar un archivo en una tabla. Bueno, leí que debería tener este
> atributo del tipo byteA, pero quisiera saber hasta cuanto podría
> almacenar en esta tabla??.

1 GB en cada columna de tipo bytea (en cada registro).

-- 
Alvaro Herrera                http://www.amazon.com/gp/registry/CTMLCN8V17R4
"The important things in the world are problems with society that we don't
understand at all. The machines will become more complicated but they won't
be more complicated than the societies that run them."    (Freeman Dyson)


      

Responder a