mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
createdb: Fix quoting of --encoding, --lc-ctype and --lc-collate
The original coding failed to properly quote those arguments, leading to failures when using quotes in the values used. As the quoting can be encoding-sensitive, the connection to the backend needs to be taken before applying the correct quoting. Author: Michael Paquier Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/20200214041004.GB1998@paquier.xyz Backpatch-through: 9.5
This commit is contained in:
parent
3e5308969a
commit
3340034f2c
@ -177,6 +177,13 @@ main(int argc, char *argv[])
|
|||||||
dbname = get_user_name_or_exit(progname);
|
dbname = get_user_name_or_exit(progname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* No point in trying to use postgres db when creating postgres db. */
|
||||||
|
if (maintenance_db == NULL && strcmp(dbname, "postgres") == 0)
|
||||||
|
maintenance_db = "template1";
|
||||||
|
|
||||||
|
conn = connectMaintenanceDatabase(maintenance_db, host, port, username,
|
||||||
|
prompt_password, progname, echo);
|
||||||
|
|
||||||
initPQExpBuffer(&sql);
|
initPQExpBuffer(&sql);
|
||||||
|
|
||||||
appendPQExpBuffer(&sql, "CREATE DATABASE %s",
|
appendPQExpBuffer(&sql, "CREATE DATABASE %s",
|
||||||
@ -187,23 +194,25 @@ main(int argc, char *argv[])
|
|||||||
if (tablespace)
|
if (tablespace)
|
||||||
appendPQExpBuffer(&sql, " TABLESPACE %s", fmtId(tablespace));
|
appendPQExpBuffer(&sql, " TABLESPACE %s", fmtId(tablespace));
|
||||||
if (encoding)
|
if (encoding)
|
||||||
appendPQExpBuffer(&sql, " ENCODING '%s'", encoding);
|
{
|
||||||
|
appendPQExpBufferStr(&sql, " ENCODING ");
|
||||||
|
appendStringLiteralConn(&sql, encoding, conn);
|
||||||
|
}
|
||||||
if (template)
|
if (template)
|
||||||
appendPQExpBuffer(&sql, " TEMPLATE %s", fmtId(template));
|
appendPQExpBuffer(&sql, " TEMPLATE %s", fmtId(template));
|
||||||
if (lc_collate)
|
if (lc_collate)
|
||||||
appendPQExpBuffer(&sql, " LC_COLLATE '%s'", lc_collate);
|
{
|
||||||
|
appendPQExpBufferStr(&sql, " LC_COLLATE ");
|
||||||
|
appendStringLiteralConn(&sql, lc_collate, conn);
|
||||||
|
}
|
||||||
if (lc_ctype)
|
if (lc_ctype)
|
||||||
appendPQExpBuffer(&sql, " LC_CTYPE '%s'", lc_ctype);
|
{
|
||||||
|
appendPQExpBufferStr(&sql, " LC_CTYPE ");
|
||||||
|
appendStringLiteralConn(&sql, lc_ctype, conn);
|
||||||
|
}
|
||||||
|
|
||||||
appendPQExpBufferChar(&sql, ';');
|
appendPQExpBufferChar(&sql, ';');
|
||||||
|
|
||||||
/* No point in trying to use postgres db when creating postgres db. */
|
|
||||||
if (maintenance_db == NULL && strcmp(dbname, "postgres") == 0)
|
|
||||||
maintenance_db = "template1";
|
|
||||||
|
|
||||||
conn = connectMaintenanceDatabase(maintenance_db, host, port, username,
|
|
||||||
prompt_password, progname, echo);
|
|
||||||
|
|
||||||
if (echo)
|
if (echo)
|
||||||
printf("%s\n", sql.data);
|
printf("%s\n", sql.data);
|
||||||
result = PQexec(conn, sql.data);
|
result = PQexec(conn, sql.data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user