Antes que o Dutra me mate, desculpem, é que me empolguei, eu devia ter colado o código no pastebin.
Bruno E. A. Silva. Analista de Sistemas. 2012/7/27 Bruno Silva <[email protected]> > Tomei a liberdade de fazer alguns testes e aparentemente não ia ser tão > simples, então segue um codigo em java para você exportar suas imagens. > Não esqueça de baixar o driver jdbc[1]. > Esse código usei baseado em um tutorial[2] > Execute dessa forma: java -cp postgresql-9.1-902.jdbc4.jar:. GravaImagem > > Arquivo GravaImagem.java > ----------------- INICIO ARQUIVO ------------- > import java.io.FileOutputStream; > import java.io.IOException; > import java.io.InputStream; > import java.io.OutputStream; > import java.sql.Connection; > import java.sql.DriverManager; > import java.sql.PreparedStatement; > import java.sql.ResultSet; > import java.sql.SQLException; > import java.util.logging.Level; > import java.util.logging.Logger; > > public class GravaImagem { > public static void main(String[] args) { > Connection con = null; > PreparedStatement pst = null; > FileOutputStream fos = null; > > String url = "jdbc:postgresql://ip_servidor_postgres/base"; > String user = "seuusuarioaqui"; > String password = "suasenhaaqui"; > try { > > con = DriverManager.getConnection(url, user, password); > > String query = "SELECT nome_arquivo, arquivo, LENGTH(arquivo) > FROM tabela"; > pst = con.prepareStatement(query); > > ResultSet result = pst.executeQuery(); > while ( result.next() ) { > > fos = new FileOutputStream(result.getString("nome_arquivo")); > > int len = result.getInt(3); > byte[] buf = result.getBytes("arquivo"); > fos.write(buf, 0, len); > fos.close(); > } > > } catch (IOException | SQLException ex) { > Logger lgr = Logger.getLogger(GravaImagem.class.getName()); > lgr.log(Level.SEVERE, ex.getMessage(), ex); > > } finally { > > try { > if (pst != null) { > pst.close(); > } > if (con != null) { > con.close(); > } > if (fos != null) { > fos.close(); > } > > } catch (IOException | SQLException ex) { > Logger lgr = Logger.getLogger(GravaImagem.class.getName()); > lgr.log(Level.WARNING, ex.getMessage(), ex); > > } > } > } > } > --------------------------- FIM DO ARQUIVO ---- > > > > [1] jdbc.postgresql.org > [2] http://zetcode.com/db/postgresqljavatutorial/ > > Bruno E. A. Silva. > Analista de Sistemas. > > > > 2012/7/27 Bruno Silva <[email protected]> > >> Olha só, consultando a lista encontrei essa solução[1], pode ser que lhe >> atenda. >> Confesso que fiquei intrigado com o tamanho da base, 750G só de arquivos >> no banco? >> Talvez a melhor solução de backup para você seja replicar a base e fazer >> backups diferenciais dos archive_logs, alguém me corrija - e eu sei que vai >> acontecer - se eu estiver enganado. >> E mais, como está a performance do banco? Não se espante com minhas >> perguntas é que trabalho em uma empresa que usa um outro banco e disseram - >> DBA's ceritifcados - que o mesmo não suportaria mais de 900G de binários. >> >> >> >> [1] - http://postgresql.1045698.n5.nabble.com/campos-bytea-td2049981.html >> Bruno E. A. Silva. >> Analista de Sistemas. >> Bacharel em Sistemas de Informação >> Pós-graduando em Gerência de Projetos >> Certified Scrum Master >> LPIC-1 >> SCJP, SE 6 >> Novell CLA / DCTS ECR >> DBA Postgres >> ------------------------------- >> “A caixa dizia: Requer MS Windows ou superior. Então instalei Linux.” - >> Sábio Desconhecido >> "Alguns prestam serviço/consultoria de Qualidade, os outros vendem >> licença!" >> >> >> >> 2012/7/27 Bruno Silva <[email protected]> >> >>> Mas Jota, a funçao lo_export não trabalha com bytea, ela lê o codigo de >>> referencia e exporta usando o tipo lo. >>> Em 27/07/2012 17:18, "JotaComm" <[email protected]> escreveu: >>> >>> Olá, >>>> >>>> Em 27 de julho de 2012 16:20, SOUTO <[email protected]> escreveu: >>>> >>>>> Pessoal, >>>>> >>>>> Tenho uma tbl onde armazeno vários tipos de arquivos em um campo bytea. >>>>> O problema é a este campo está com 720 GB, impossível fazer bkp diário >>>>> disso então pensei no bkp diferencial (Outro problema que não sei >>>>> resolver). >>>>> Então pensei em exportar o conteúdo deste campo para uma pasta no >>>>> server, e com isso conseguiria fazer um bkp diferencial diário pegando >>>>> apenas os arquivos que não tem na pata em epígrafe. >>>>> O problema é tentei utilizar a função lo_export(bytea, text) e veja o >>>>> erro que me dá: >>>>> >>>>> SELECT >>>>> lo_export(arquivo,'/Diretório/'||idarquivos::VARCHAR||nome::VARCHAR) FROM >>>>> schema.tabela WHERE idarquivos = 777; >>>>> ERRO: função lo_export(bytea, text) não existe >>>>> LINHA 1: SELECT lo_export(arquivo,'/Diretório... >>>>> ^ >>>>> DICA: Nenhuma função corresponde com o nome e os tipos de argumento >>>>> informados. Você precisa adicionar conversões de tipo explícitas. >>>>> >>>> >>>> postgres=# INSERT INTO tab VALUES >>>> (1,lo_import('/home/jmsilva/arquivo.log')); >>>> INSERT 0 1 >>>> postgres=# SELECT * FROM tab; >>>> codigo | arquivo >>>> --------+--------- >>>> 1 | 16840 >>>> (1 row) >>>> >>>> postgres=# SELECT lo_export(arquivo,'/tmp/arquivo.log') FROM tab WHERE >>>> tab.codigo=1; >>>> lo_export >>>> ----------- >>>> 1 >>>> (1 row) >>>> >>>> postgres=# >>>> >>>> Qual versão de PostgreSQL você está utilizando? >>>> >>>> >>>> >>>> >>>>> >>>>> Ats >>>>> >>>>> Alguém teria uma dica/ajuda? >>>>> Fico no aguardo. >>>>> >>>>> -- >>>>> Atenciosamente, >>>>> >>>>> Claudio Souto >>>>> (61) 9831-9381 >>>>> >>>>> _______________________________________________ >>>>> pgbr-geral mailing list >>>>> [email protected] >>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>>>> >>>>> >>>> >>>> Abraços >>>> -- >>>> JotaComm >>>> http://jotacomm.wordpress.com >>>> >>>> _______________________________________________ >>>> pgbr-geral mailing list >>>> [email protected] >>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>>> >>>> >> >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
