Configuration de Postgres pour des données volumineuses
Bonjour,
j'ai un petit souci dans le stockage des données binaire dans une table de type "BYTEA". je m'explique.
j'ai crée une table de type "BYTEA" je peux donc aller jusqu'à 1Go par ligne ..mais le problème qui se pose une fois la donnée à stocker dépasse 10Mo je ne peux pas l'insérer dans ma table ?!.. tout les donnée inférieur à 10Mo je les stocke et je les récupère facilement sans aucun problème ..8O.
l'erreur que j'ai lors du stockage d'une donnée de 700Mo
le code java pour stocker mes données:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
try {
Class.forName("org.postgresql.Driver");
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/NOM_BDD","postgres","MOTDEPASSE");
FileInputStream intput_stream_data = new FileInputStream(new File("C:\\test_donnee\\video.avi"));
try
{
PreparedStatement ps = conn.prepareStatement("insert into bdd_binaire (nom_bdd_binaire, contenu_bdd_binaire) values (?,?)");
try
{
ps.setString(1,"video");
ps.setBinaryStream(2, intput_stream_data, (int)(new File("C:\\test_donnee\\video.avi")).length());
ps.executeUpdate();
}
finally
{
ps.close();
}
}
finally
{
intput_stream_data.close();
}
conn.close();
} catch (Exception e)
{
e.printStackTrace();
}
} |
le code pour les récuper depuis ma BDD
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
try
{
PreparedStatement ps = conn.prepareStatement("select contenu_bdd_binaire from bdd_binaire where nom_bdd_binaire=?");
try
{
ps.setString(1,"video");
ResultSet rs = ps.executeQuery();
try
{
if(rs.next())
{
java.io.InputStream istreamImage = rs.getBinaryStream("contenu_bdd_binaire");
byte[] buffer = new byte[1024];
int length = 0;
while((length = istreamImage.read(buffer)) != -1)
{
output_data.write(buffer, 0, length);
}
}
}
finally
{
rs.close();
}
}
finally
{
ps.close();
}
}
finally
{
output_data.close();
}
conn.close();
} catch (Exception e)
{
e.printStackTrace();
} |
j'ai essayé de stocker une donnée de 700Mo dans ma table et voici l'erreur que j'ai eu dans mon IDE Eclipse :
Code:
1 2 3 4 5 6 7 8 9 10
|
org.postgresql.util.PSQLException: ERREUR: mémoire épuisée
Détail : Échec d'une requête de taille 734068740.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
at BDD_BINAIRE.main(BDD_BINAIRE.java:29) |
Ma question est simple : il est ou le probleme est-ce que mon code java ou bien la configuration de mon postgres?:(
la conficguration de mon Postgres (la mienne est par défaut)est la cause de ce probleme comment je peux ajuster cette dernière pour corriger le coup.
je note aussi que je utilise une machine dont voici les performance:
Dual CPU 2.4Ghz, 2.00Go de RAM
Merci d'avance pour les réponses
A+