• [^] # Re: commits intermédiaires

    Posté par (site web personnel) . En réponse au message déconnexion auto de postgres. É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