Postgresql und BLOBs - maximale Größe der bytea?
Ich versuche momentan, um Bilder zu speichern, die in einer psql-Tabelle und wurde nach dieser Anleitung hier mit einem bytea für das Bild. Problem ist, dass das Bild, das ich versuche zu legen ist ~24kb und ich erhalte eine Fehlermeldung, dass die maximale Größe liegt hier bei 8191, obwohl ich gelesen habe, in andere Orte, die ein bytea sollten in der Lage zu speichern bis zu 1gb. Sicherlich sollte ich in der Lage zu heben, das max limit irgendwie?
Code:
String query = "INSERT INTO " + tableName + " VALUES(?);";
try {
PreparedStatement stmt = conn.prepareStatement(query);
File file = new File(location);
FileInputStream fi = new FileInputStream(file);
stmt.setBinaryStream(1, fi, (int)file.length());
boolean res = stmt.execute();
stmt.close();
fi.close
return res;
}
Die Datenbanktabelle besteht aus nur einem bytea im moment.
Fehlermeldung:
org.postgresql.util.PSQLException: ERROR: index row requires 23888 bytes, maximum size is 8191
- Bitte zeigen Sie uns den code und die genaue Fehlermeldung (idealerweise inklusive stacktrace). Es ist kein problem mit der Lagerung (viel) mehr als 8KB in einem
bytea
Spalte - Wer wirft den Fehler? Ich denke der Fehler kommt vom Webserver, wo die 8k-Grenze ist üblich, für die uploads.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anscheinend haben Sie eine index auf die Spalte (ehrlich gesagt, ich bin überrascht, dass man es erstellen könnte - ich hätte erwartet, dass Postgres ablehnen dass).
Einen index auf eine
bytea
Spalte nicht wirklich sinnvoll. Wenn Sie entfernen Sie den index, Sie sollten in Ordnung sein.Die eigentliche Frage ist: warum haben Sie das erstellen eines Indexes für eine Spalte, die speichert binäre Daten?
Wenn Sie brauchen, um sicherzustellen, dass Sie nicht hochladen, das gleiche Bild zweimal, Sie können erstellen Sie einen eindeutigen index auf die md5 (oder eine andere hash) von der bytea: