|
13 | 13 | #include "funcapi.h"
|
14 | 14 | #include "fmgr.h"
|
15 | 15 | #include "miscadmin.h"
|
| 16 | + |
16 | 17 | #include "libpq-fe.h"
|
| 18 | +#include "common/username.h" |
| 19 | + |
17 | 20 | #include "postmaster/postmaster.h"
|
18 | 21 | #include "postmaster/bgworker.h"
|
19 | 22 | #include "storage/lwlock.h"
|
@@ -1933,21 +1936,31 @@ static void MtmSplitConnStrs(void)
|
1933 | 1936 | elog(ERROR, "Database is not specified in connection string: '%s'", connStr);
|
1934 | 1937 |
|
1935 | 1938 | if (dbUser == NULL)
|
1936 |
| - elog(ERROR, "Database user is not specified in connection string: '%s'", connStr); |
| 1939 | + { |
| 1940 | + char *errstr; |
| 1941 | + const char *username = get_user_name(&errstr); |
| 1942 | + if (!username) |
| 1943 | + elog(FATAL, "Database user is not specified in connection string '%s', fallback failed: %s", connStr, errstr); |
| 1944 | + else |
| 1945 | + elog(WARNING, "Database user is not specified in connection string '%s', fallback to '%s'", connStr, username); |
| 1946 | + MtmDatabaseUser = pstrdup(username); |
| 1947 | + } |
| 1948 | + else |
| 1949 | + { |
| 1950 | + dbUser += 5; |
| 1951 | + end = strchr(dbUser, ' '); |
| 1952 | + if (!end) end = strchr(dbUser, '\0'); |
| 1953 | + Assert(end != NULL); |
| 1954 | + len = end - dbUser; |
| 1955 | + MtmDatabaseUser = pnstrdup(dbUser, len); |
| 1956 | + } |
1937 | 1957 |
|
1938 | 1958 | dbName += 7;
|
1939 |
| - for (end = dbName; *end != ' ' && *end != '\0'; end++); |
| 1959 | + end = strchr(dbName, ' '); |
| 1960 | + if (!end) end = strchr(dbName, '\0'); |
| 1961 | + Assert(end != NULL); |
1940 | 1962 | len = end - dbName;
|
1941 |
| - MtmDatabaseName = (char*)palloc(len + 1); |
1942 |
| - memcpy(MtmDatabaseName, dbName, len); |
1943 |
| - MtmDatabaseName[len] = '\0'; |
1944 |
| - |
1945 |
| - dbUser += 5; |
1946 |
| - for (end = dbUser; *end != ' ' && *end != '\0'; end++); |
1947 |
| - len = end - dbUser; |
1948 |
| - MtmDatabaseUser = (char*)palloc(len + 1); |
1949 |
| - memcpy(MtmDatabaseUser, dbUser, len); |
1950 |
| - MtmDatabaseUser[len] = '\0'; |
| 1963 | + MtmDatabaseName = pnstrdup(dbName, len); |
1951 | 1964 | }
|
1952 | 1965 | connStr = p + 1;
|
1953 | 1966 | }
|
|
0 commit comments