|
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"
|
@@ -1931,21 +1934,31 @@ static void MtmSplitConnStrs(void)
|
1931 | 1934 | elog(ERROR, "Database is not specified in connection string: '%s'", connStr);
|
1932 | 1935 |
|
1933 | 1936 | if (dbUser == NULL)
|
1934 |
| - elog(ERROR, "Database user is not specified in connection string: '%s'", connStr); |
| 1937 | + { |
| 1938 | + char *errstr; |
| 1939 | + const char *username = get_user_name(&errstr); |
| 1940 | + if (!username) |
| 1941 | + elog(FATAL, "Database user is not specified in connection string '%s', fallback failed: %s", connStr, errstr); |
| 1942 | + else |
| 1943 | + elog(WARNING, "Database user is not specified in connection string '%s', fallback to '%s'", connStr, username); |
| 1944 | + MtmDatabaseUser = pstrdup(username); |
| 1945 | + } |
| 1946 | + else |
| 1947 | + { |
| 1948 | + dbUser += 5; |
| 1949 | + end = strchr(dbUser, ' '); |
| 1950 | + if (!end) end = strchr(dbUser, '\0'); |
| 1951 | + Assert(end != NULL); |
| 1952 | + len = end - dbUser; |
| 1953 | + MtmDatabaseUser = pnstrdup(dbUser, len); |
| 1954 | + } |
1935 | 1955 |
|
1936 | 1956 | dbName += 7;
|
1937 |
| - for (end = dbName; *end != ' ' && *end != '\0'; end++); |
| 1957 | + end = strchr(dbName, ' '); |
| 1958 | + if (!end) end = strchr(dbName, '\0'); |
| 1959 | + Assert(end != NULL); |
1938 | 1960 | len = end - dbName;
|
1939 |
| - MtmDatabaseName = (char*)palloc(len + 1); |
1940 |
| - memcpy(MtmDatabaseName, dbName, len); |
1941 |
| - MtmDatabaseName[len] = '\0'; |
1942 |
| - |
1943 |
| - dbUser += 5; |
1944 |
| - for (end = dbUser; *end != ' ' && *end != '\0'; end++); |
1945 |
| - len = end - dbUser; |
1946 |
| - MtmDatabaseUser = (char*)palloc(len + 1); |
1947 |
| - memcpy(MtmDatabaseUser, dbUser, len); |
1948 |
| - MtmDatabaseUser[len] = '\0'; |
| 1961 | + MtmDatabaseName = pnstrdup(dbName, len); |
1949 | 1962 | }
|
1950 | 1963 | connStr = p + 1;
|
1951 | 1964 | }
|
|
0 commit comments