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)