diff --git a/common/db-wrapper/db-wrapper.c b/common/db-wrapper/db-wrapper.c index d434145..4757aca 100644 --- a/common/db-wrapper/db-wrapper.c +++ b/common/db-wrapper/db-wrapper.c @@ -95,6 +95,7 @@ db_conn_pool_new_mysql (const char *host, DBConnPool * db_conn_pool_new_pgsql (const char *host, + unsigned int port, const char *user, const char *password, const char *db_name, @@ -124,7 +125,7 @@ db_conn_pool_new_pgsql (const char *host, DBConnPool *pool; - pool = pgsql_db_conn_pool_new (host, user, password, db_name, unix_socket); + pool = pgsql_db_conn_pool_new (host, port, user, password, db_name, unix_socket); init_conn_pool_common (pool, max_connections); return pool; diff --git a/common/db-wrapper/db-wrapper.h b/common/db-wrapper/db-wrapper.h index 8345b53..18bfaa9 100644 --- a/common/db-wrapper/db-wrapper.h +++ b/common/db-wrapper/db-wrapper.h @@ -29,6 +29,7 @@ db_conn_pool_new_mysql (const char *host, DBConnPool * db_conn_pool_new_pgsql (const char *host, + unsigned int port, const char *user, const char *password, const char *db_name, diff --git a/common/db-wrapper/pgsql-db-ops.c b/common/db-wrapper/pgsql-db-ops.c index 9ec69a6..75c7249 100644 --- a/common/db-wrapper/pgsql-db-ops.c +++ b/common/db-wrapper/pgsql-db-ops.c @@ -8,6 +8,7 @@ typedef struct PGDBConnPool { DBConnPool parent; char *host; + unsigned int port; char *user; char *password; char *db_name; @@ -16,6 +17,7 @@ typedef struct PGDBConnPool { DBConnPool * pgsql_db_conn_pool_new (const char *host, + unsigned int port, const char *user, const char *password, const char *db_name, @@ -24,6 +26,7 @@ pgsql_db_conn_pool_new (const char *host, PGDBConnPool *pool = g_new0 (PGDBConnPool, 1); pool->host = g_strdup (host); + pool->port = port; pool->user = g_strdup (user); pool->password = g_strdup (password); pool->db_name = g_strdup(db_name); @@ -88,8 +91,12 @@ connect_pgsql (PGDBConnPool *pool, GError **error) g_string_append_printf (buf, "host='%s' ", pool->host); } - g_string_append_printf (buf, "dbname='%s' ", pool->db_name); + if (pool->port > 0) { + g_string_append_printf (buf, "port=%u ", pool->port); + } + g_string_append_printf (buf, "dbname='%s' ", pool->db_name); + db = PQconnectdb (buf->str); if (PQstatus (db) != CONNECTION_OK) { g_set_error (error, SEAF_DB_ERROR_DOMAIN, SEAF_DB_ERROR_CODE, diff --git a/common/db-wrapper/pgsql-db-ops.h b/common/db-wrapper/pgsql-db-ops.h index c8e884e..f027aec 100644 --- a/common/db-wrapper/pgsql-db-ops.h +++ b/common/db-wrapper/pgsql-db-ops.h @@ -3,6 +3,7 @@ DBConnPool * pgsql_db_conn_pool_new (const char *host, + unsigned int port, const char *user, const char *password, const char *db_name, diff --git a/common/seaf-db.c b/common/seaf-db.c index 135ff61..7684ef6 100644 --- a/common/seaf-db.c +++ b/common/seaf-db.c @@ -56,6 +56,7 @@ seaf_db_new_mysql (const char *host, SeafDB * seaf_db_new_pgsql (const char *host, + unsigned int port, const char *user, const char *passwd, const char *db_name, @@ -72,7 +73,7 @@ seaf_db_new_pgsql (const char *host, db->type = SEAF_DB_TYPE_PGSQL; - db->pool = db_conn_pool_new_pgsql (host, user, passwd, db_name, unix_socket, + db->pool = db_conn_pool_new_pgsql (host, port, user, passwd, db_name, unix_socket, max_connections); return db; diff --git a/common/seaf-db.h b/common/seaf-db.h index e4d10c3..db46074 100644 --- a/common/seaf-db.h +++ b/common/seaf-db.h @@ -26,6 +26,7 @@ seaf_db_new_mysql (const char *host, SeafDB * seaf_db_new_pgsql (const char *host, + unsigned int port, const char *user, const char *passwd, const char *db_name, diff --git a/common/seaf-utils.c b/common/seaf-utils.c index 393aea1..e59176e 100644 --- a/common/seaf-utils.c +++ b/common/seaf-utils.c @@ -134,6 +134,7 @@ static int pgsql_db_start (SeafileSession *session) { char *host, *user, *passwd, *db, *unix_socket; + unsigned int port; GError *error = NULL; host = seaf_key_file_get_string (session->config, "database", "host", &error); @@ -159,11 +160,17 @@ pgsql_db_start (SeafileSession *session) seaf_warning ("DB name not set in config.\n"); return -1; } + port = g_key_file_get_integer (session->config, + "database", "port", &error); + if (error) { + port = 0; + g_clear_error (&error); + } unix_socket = seaf_key_file_get_string (session->config, "database", "unix_socket", &error); - session->db = seaf_db_new_pgsql (host, user, passwd, db, unix_socket, + session->db = seaf_db_new_pgsql (host, port, user, passwd, db, unix_socket, DEFAULT_MAX_CONNECTIONS); if (!session->db) { seaf_warning ("Failed to start pgsql db.\n");