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 ...
l'erreur que j'ai lors du stockage d'une donnée de 700Mo
le code java pour stocker mes données:
le code pour les récuper depuis ma BDD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Ma question est simple : il est ou le probleme est-ce que mon code java ou bien la configuration de mon postgres?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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+
Partager