mirror of
https://github.com/postgres/postgres.git
synced 2025-06-14 18:42:34 +03:00
createdb: compare strategy case-insensitive
When specifying the createdb strategy, the documentation suggests valid options are FILE_COPY and WAL_LOG, but the code does case-sensitive comparison and accepts only "file_copy" and "wal_log" as valid. Fixed by doing a case-insensitive comparison using pg_strcasecmp(), same as for other string parameters nearby. While at it, apply fmtId() to a nearby "locale_provider". This already did the comparison in case-insensitive way, but the value would not be double-quoted, confusing the parser and the error message. Backpatch to 15, where the strategy was introduced. Backpatch-through: 15 Reviewed-by: Tom Lane Discussion: https://postgr.es/m/90c6913a-1dd2-42b4-8365-ce3b09c39b17@enterprisedb.com
This commit is contained in:
@ -1018,15 +1018,15 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
|
||||
char *strategy;
|
||||
|
||||
strategy = defGetString(dstrategy);
|
||||
if (strcmp(strategy, "wal_log") == 0)
|
||||
if (pg_strcasecmp(strategy, "wal_log") == 0)
|
||||
dbstrategy = CREATEDB_WAL_LOG;
|
||||
else if (strcmp(strategy, "file_copy") == 0)
|
||||
else if (pg_strcasecmp(strategy, "file_copy") == 0)
|
||||
dbstrategy = CREATEDB_FILE_COPY;
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("invalid create database strategy \"%s\"", strategy),
|
||||
errhint("Valid strategies are \"wal_log\", and \"file_copy\".")));
|
||||
errhint("Valid strategies are \"wal_log\" and \"file_copy\".")));
|
||||
}
|
||||
|
||||
/* If encoding or locales are defaulted, use source's setting */
|
||||
|
Reference in New Issue
Block a user