]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/postgresql.c
Tweak mutex order for SD
[bacula/bacula] / bacula / src / cats / postgresql.c
index d5b9879392366a64f107e70714a9b6db60093060..08f5846f9519ef11e440bdf1a7e8ec66fe9c55a1 100644 (file)
@@ -148,7 +148,12 @@ static bool check_database_encoding(JCR *jcr, B_DB *mdb)
       Jmsg(jcr, M_ERROR, 0, "Can't check database encoding %s", mdb->errmsg);
    } else {
       ret = bstrcmp(row[0], "SQL_ASCII");
-      if (!ret) {
+
+      if (ret) {
+         /* if we are in SQL_ASCII, we can force the client_encoding to SQL_ASCII too */
+         db_sql_query(mdb, "SET client_encoding TO 'SQL_ASCII'", NULL, NULL);
+
+      } else {                  /* something is wrong with database encoding */
          Mmsg(mdb->errmsg, 
               _("Encoding error for database \"%s\". Wanted SQL_ASCII, got %s\n"),
               mdb->db_name, row[0]);
@@ -223,10 +228,9 @@ db_open_database(JCR *jcr, B_DB *mdb)
             mdb->db_password==NULL?"(NULL)":mdb->db_password);
 
    if (PQstatus(mdb->db) != CONNECTION_OK) {
-      Mmsg2(&mdb->errmsg, _("Unable to connect to PostgreSQL server.\n"
-            "Database=%s User=%s\n"
-            "It is probably not running or your password is incorrect.\n"),
-             mdb->db_name, mdb->db_user);
+      Mmsg2(&mdb->errmsg, _("Unable to connect to PostgreSQL server. Database=%s User=%s\n"
+         "Possible causes: SQL server not running; password incorrect; max_connections exceeded.\n"),
+         mdb->db_name, mdb->db_user);
       V(mutex);
       return 0;
    }
@@ -710,6 +714,7 @@ int my_postgresql_batch_end(JCR *jcr, B_DB *mdb, const char *error)
 {
    int res;
    int count=30;
+   PGresult *result;
    Dmsg0(500, "my_postgresql_batch_end started\n");
 
    if (!mdb) {                  /* no files ? */
@@ -730,7 +735,15 @@ int my_postgresql_batch_end(JCR *jcr, B_DB *mdb, const char *error)
       mdb->status = 0;
       Mmsg1(&mdb->errmsg, _("error ending batch mode: %s"), PQerrorMessage(mdb->db));
    }
-   
+
+   /* Check command status and return to normal libpq state */
+   result = PQgetResult(mdb->db);
+   if (PQresultStatus(result) != PGRES_COMMAND_OK) {
+      Mmsg1(&mdb->errmsg, _("error ending batch mode: %s"), PQerrorMessage(mdb->db));
+      mdb->status = 0;
+   }
+   PQclear(result); 
+
    Dmsg0(500, "my_postgresql_batch_end finishing\n");
 
    return mdb->status;
@@ -775,7 +788,7 @@ int my_postgresql_batch_insert(JCR *jcr, B_DB *mdb, ATTR_DBR *ar)
    if (res <= 0) {
       Dmsg0(500, "we failed\n");
       mdb->status = 0;
-      Mmsg1(&mdb->errmsg, _("error ending batch mode: %s"), PQerrorMessage(mdb->db));
+      Mmsg1(&mdb->errmsg, _("error copying in batch mode: %s"), PQerrorMessage(mdb->db));
    }
 
    Dmsg0(500, "my_postgresql_batch_insert finishing\n");