sql >> Databasteknik >  >> RDS >> PostgreSQL

Lagra bilder i PostgreSQL

Uppdatering till 2012, när vi ser att bildstorlekar och antal bilder växer och växer, i alla applikationer...

Vi behöver en viss skillnad mellan "originalbild" och "bearbetad bild", som miniatyrbild.

Som Jcobys svar säger, det finns två alternativ, då rekommenderar jag:

  • använd blob (Binary Large OBject):för originalbildslagring, vid ditt bord. Se Ivans svar (inga problem med att säkerhetskopiera blobbar!), PostgreSQL ytterligare medföljande moduler, instruktioner etc.

  • använd en separat databas med DBlink:för originalbildlager, i en annan (uniform/specialiserad) databas. I det här fallet föredrar jag bytea , men blobb är nära detsamma. Separera databas är det bästa sättet för en "unified image webservice".

  • använd bytea (BYTE Array):för cachelagring av miniatyrbilder. Cachelagra de små bilderna för att skicka dem snabbt till webbläsaren (för att undvika renderingsproblem) och minska serverbehandlingen. Cache också viktiga metadata, som bredd och höjd. Databascache är det enklaste sättet, men kontrollera dina behov och serverkonfigurationer (t.ex. Apache-moduler):lagra miniatyrbilder i filsystemet kan vara bättre, jämför prestanda. Kom ihåg att det är en (enhetlig) webbtjänst, som sedan kan lagras i en separat databas (utan säkerhetskopior), som betjänar många tabeller. Se även PostgreSQL-manualen för binära datatyper, tester med bytekolumn, etc.

OBS1:idag är användningen av "dubbla lösningar" (databas+filsystem) utfasad (!). Det finns många fördelar med att använda "endast databas" istället för dubbel. PostgreSQL har jämförbar prestanda och bra verktyg för export/import/input/output.

OBS2:kom ihåg att PostgreSQL bara har bytea , inte har en standard Oracles BLOB :"SQL-standarden definierar (...) BLOB. Inmatningsformatet skiljer sig från bytea, men de tillhandahållna funktionerna och operatorerna är för det mesta desamma", Manual.

EDIT 2014 :Jag har inte ändrat den ursprungliga texten ovan idag (mitt svar var 22 april '12, nu med 14 röster), Jag öppnar svaret för dina ändringar (se "Wiki-läge", du kan redigera!), för korrekturläsning och för uppdateringar .
Frågan är stabil (@Ivans '08 svar med 19 röster), snälla, hjälp till att förbättra denna text.



  1. Överför data från en databas till en annan databas

  2. Beräkna avstånd mellan två punkter (latitud, longitud)

  3. Hur påverkar NULL-värden prestanda i en databassökning?

  4. Driftstopp och Hotpatch appliceringsläge i adop R12.2