PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Armazenando imagens no PostgreSQL


Atualizando para 2012, quando vemos que os tamanhos das imagens e o número de imagens estão crescendo e crescendo, em todas as aplicações...

Precisamos de alguma distinção entre "imagem original" e "imagem processada", como miniatura.

Como diz a resposta do Jcoby, existem duas opções, então, recomendo:

  • use blob (Binary Large OBject):para armazenamento de imagens originais, à sua mesa. Veja a resposta de Ivan (sem problemas em fazer backup de blobs!), módulos fornecidos adicionais do PostgreSQL, instruções etc.

  • use um banco de dados separado com DBlink:para armazenamento de imagem original, em outro banco de dados (unificado/especializado). Nesse caso, prefiro bytea , mas blob é próximo do mesmo. Separar banco de dados é o melhor caminho para um "webservice de imagem unificada".

  • use bytea (BYTE Array):para armazenar em cache imagens em miniatura. Faça o cache das pequenas imagens para enviá-las rapidamente ao navegador da web (para evitar problemas de renderização) e reduzir o processamento do servidor. Cache também metadados essenciais, como largura e altura. O cache de banco de dados é a maneira mais fácil, mas verifique suas necessidades e configurações do servidor (ex. módulos Apache):armazenar miniaturas no sistema de arquivos pode ser melhor, compare desempenhos. Lembre-se que é um web-service (unificado), então pode ser armazenado em um banco de dados separado (sem backups), atendendo muitas tabelas. Veja também manual de tipos de dados binários do PostgreSQL, testes com coluna bytea, etc.

NOTA1:hoje o uso de "soluções duplas" (banco de dados + sistema de arquivos) está obsoleto (!). Há muitas vantagens em usar "apenas banco de dados" em vez de dual. O PostgreSQL tem desempenho comparável e boas ferramentas para exportação/importação/entrada/saída.

NOTA2:lembre-se que o PostgreSQL possui apenas bytea , não tem um BLOB padrão do Oracle :"O padrão SQL define (...) BLOB. O formato de entrada é diferente de bytea, mas as funções e operadores fornecidos são basicamente os mesmos",Manual.

EDITAR 2014 :não alterei o texto original acima hoje (minha resposta foi 22 de abril de 2012, agora com 14 votos), Estou abrindo a resposta para suas alterações (veja "Modo Wiki", você pode editar!), para revisão e para atualizações .
A pergunta está estável (resposta do @Ivans '08 com 19 votos), por favor, ajudem a melhorar este texto.