Forum Programmation.java déconnexion auto de postgres

Posté par  .
Étiquettes : aucune
0
16
juin
2006
bonjour à tous,
j'ai une applis java qui alimente une base à partir d'une autre,
mon probleme c'est au moment de l'insertion des données postgresql me lache et il deconnecte l'utilisateur, est ce que c'est un probleme de config genre timeout ou le buffer, driver jdbc ...
parce que l'appli elle marche bien avec des tables de 2000 2500 lignes mais ça plante avec une table de 50000 lignes,


merci de votre aide
  • # commits intermédiaires

    Posté par  (site web personnel) . Évalué à 2.

    50 000 ligne d'un coup ?
    essaie de faire des insertion par blocs de moins de lignes (cherche commits intermédiaires, ça doit exister sur postgres). ça t'évitera d'exploser les rollbacks (enfin c'est comme ça qu'on faisait avec oracle :/ )
    • [^] # Re: commits intermédiaires

      Posté par  (site web personnel) . Évalué à 2.

      Par défaut Postgresql fonctionne en mode autocommit, donc si on ne démarre pas explicitement une transaction la base commitera chaque insert.

      http://docs.postgresqlfr.org/8.1/sql-begin.html
      • [^] # Re: commits intermédiaires

        Posté par  (site web personnel) . Évalué à 2.

        oui et ? :p
        ma compréhension de l'autocommit c'est que tu n'as pas explicitement à démarrer de transaction pour une commande.
        Mais cela n'empêche pas qu'un insert into table2 select * from table1 ; (par exemple) ne se déroulera pas avec des commits à chaque ligne insérée dans table2 : pour cela il faut parcourir table1 avec un curseur et faire des commits intermédiaire (ce qui permet d'éviter de faire grossir les rollback ou de poser des locks à tout va sur les lignes de la table, ce qui va se terminer par un lock constaté de la table, qui ralentit toute transaction autre... voire peut faire échouer la requête d'insertion). Là où avec 10 à 1000 lignes dans table1 ça peut passer, avec 50000 ça peut ne pas passer, d'où l'intérêt de procéder par blocs de 500 lignes par exemple.
        C'est ce genre de choses que nos DBA mettaient en place pour booster les migrations de base à base et ça marchait plutôt rapidement.

        mais comme tu le demandes ci-dessous, ce serait effectivement plus pratique avec un message d'erreur
  • # messages d'erreur ?

    Posté par  (site web personnel) . Évalué à 1.

    - ton appli java ne te renvoie pas de message d'erreur ?
    - as tu essayé de tracer les instructions envoyées à postgresql ? (http://www.postgresql.org/docs/8.1/interactive/runtime-confi(...) )
    • [^] # Re: messages d'erreur ?

      Posté par  . Évalué à 1.

      le message d'erreur que l'appli java me renvoie c'est
      
      org.postgresql.util.PSQLException: La tentative de connexion a échoué.
      	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:136)
      	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
      	at org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:125)
      Requete ajout towns incorrecte
      	at org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:30)
      	at org.postgresql.jdbc3.Jdbc3Connection.(Jdbc3Connection.java:24)
      	at org.postgresql.Driver.makeConnection(Driver.java:382)
      	at org.postgresql.Driver.connect(Driver.java:260)
      	at java.sql.DriverManager.getConnection(DriverManager.java:549)
      	at java.sql.DriverManager.getConnection(DriverManager.java:181)
      	at pack.DriverJDBC.initDriverpgsql(DriverJDBC.java:32)
      	at com.vgo.controller.ResellersController.init(ResellersController.java:59)
      	at com.vgo.controller.ResellersController.addTowns(ResellersController.java:1209)
      	at pack.Mains.main(Mains.java:73)
      Caused by: java.net.BindException: Address already in use: connect
      	at java.net.PlainSocketImpl.socketConnect(Native Method)
      	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
      	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
      	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
      	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
      	at java.net.Socket.connect(Socket.java:516)
      	at java.net.Socket.connect(Socket.java:466)
      	at java.net.Socket.(Socket.java:366)
      	at java.net.Socket.(Socket.java:179)
      	at org.postgresql.core.PGStream.(PGStream.java:60)
      	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:77)
      	... 12 more
      
      

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.