Tom Lane wrote: > Hm, if that's as much as we have to touch, I think there's a good > argument for squeezing it into v12 rather than waiting. The point > here is mostly to avoid a behavior change from pre-v12
Yes. I was mentioning the next CF because ISTM that nowadays non-committers are expected to file patches in there, committers picking up patches both in the current and next CF based on their evaluation of priorities. But if you plan to process this one shortly, a CF entry is probably superfluous. > Just looking at the patch, I wonder whether it doesn't need some > server-version checks. At the very least this would break with > pre-9.1 servers, which lack COLLATE altogether. PFA a new version adding the clause for only 12 and up, since the previous versions are not concerned, and as you mention, really old versions would fail otherwise. Best regards, -- Daniel Vérité PostgreSQL-powered mailer: http://www.manitou-mail.org Twitter: @DanielVerite
diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c index 5c1732a..fe88d73 100644 --- a/src/fe_utils/string_utils.c +++ b/src/fe_utils/string_utils.c @@ -808,6 +808,8 @@ appendReloptionsArray(PQExpBuffer buffer, const char *reloptions, * to limit the set of objects returned. The WHERE clauses are appended * to the already-partially-constructed query in buf. Returns whether * any clause was added. + * The pattern matching uses the collation of the database through explicit + * COLLATE "default" clauses when needed (server version 12 and above). * * conn: connection query will be sent to (consulted for escaping rules). * buf: output parameter. @@ -971,16 +973,22 @@ processSQLNamePattern(PGconn *conn, PQExpBuffer buf, const char *pattern, appendPQExpBuffer(buf, "(%s OPERATOR(pg_catalog.~) ", namevar); appendStringLiteralConn(buf, namebuf.data, conn); + if (PQserverVersion(conn) >= 120000) + appendPQExpBufferStr(buf, " COLLATE \"default\""); appendPQExpBuffer(buf, "\n OR %s OPERATOR(pg_catalog.~) ", altnamevar); appendStringLiteralConn(buf, namebuf.data, conn); + if (PQserverVersion(conn) >= 120000) + appendPQExpBufferStr(buf, " COLLATE \"default\""); appendPQExpBufferStr(buf, ")\n"); } else { appendPQExpBuffer(buf, "%s OPERATOR(pg_catalog.~) ", namevar); appendStringLiteralConn(buf, namebuf.data, conn); + if (PQserverVersion(conn) >= 120000) + appendPQExpBufferStr(buf, " COLLATE \"default\""); appendPQExpBufferChar(buf, '\n'); } } @@ -997,6 +1005,8 @@ processSQLNamePattern(PGconn *conn, PQExpBuffer buf, const char *pattern, WHEREAND(); appendPQExpBuffer(buf, "%s OPERATOR(pg_catalog.~) ", schemavar); appendStringLiteralConn(buf, schemabuf.data, conn); + if (PQserverVersion(conn) >= 120000) + appendPQExpBufferStr(buf, " COLLATE \"default\""); appendPQExpBufferChar(buf, '\n'); } }