Thread
Commits
-
psql: Fix name quoting on extended statistics
- ce6b662aae7a 14.0 landed
- a397109114c8 15.0 landed
-
Extended statistics on expressions
- a4d75c86bf15 14.0 cited
-
Change CREATE STATISTICS syntax
- bc085205c8a4 10.0 cited
-
extended stats objects are the only thing written like "%s"."%s"
Justin Pryzby <pryzby@telsasoft.com> — 2021-08-28T18:16:18Z
commit a4d75c86bf15220df22de0a92c819ecef9db3849 Author: Tomas Vondra <tomas.vondra@postgresql.org> Date: Fri Mar 26 23:22:01 2021 +0100 Extended statistics on expressions This commit added to psql/describe.c: + /* statistics object name (qualified with namespace) */ + appendPQExpBuffer(&buf, "\"%s\".\"%s\"", + PQgetvalue(result, i, 2), + PQgetvalue(result, i, 3)); Everywhere else the double quotes are around the whole "schema.object" rather than both separately: "schema"."object". The code handling servers before v14 has the same thing, since: commit bc085205c8a425fcaa54e27c6dcd83101130439b Author: Alvaro Herrera <alvherre@alvh.no-ip.org> Date: Fri May 12 14:59:23 2017 -0300 Change CREATE STATISTICS syntax src/bin/psql/describe.c- /* statistics object name (qualified with namespace) */ src/bin/psql/describe.c: appendPQExpBuffer(&buf, "\"%s\".\"%s\" (", src/bin/psql/describe.c- PQgetvalue(result, i, 2), src/bin/psql/describe.c- PQgetvalue(result, i, 3)); That seems to have been first added in the patch here, but AFAIT not specifically discussed. https://www.postgresql.org/message-id/20170511221330.5akgbsoyx6wm4u34%40alvherre.pgsql At the time the patch was commited, it was the only place that used "schema"."object": $ git show bc085205c8a425fcaa54e27c6dcd83101130439b:src/bin/psql/describe.c |grep '\\"\.\\"' appendPQExpBuffer(&buf, "\"%s\".\"%s\" (", And it's still the only place, not just in describe.c, but the entire project. $ git grep -Fc '\"%s\".\"%s\"' '*.c' src/bin/psql/describe.c:2 I actually don't like writing it as "a.b" since it doesn't work to copy+paste that, because that means an object called "a.b" in the default schema. But I think for consistency it should be done the same here as everywhere else. I noticed that Peter E recently changed amcheck in the direction of consistency: | 4279e5bc8c pg_amcheck: Message style and structuring improvements I propose to change extended stats objects to be shown the same as everywhere else, with double quotes around the whole %s.%s: $ git grep '\\"%s\.%s\\"' '*.c' |wc -l 126 This affects 9 lines of output in regression tests. Note that check constraints and indexes have the same schema as their table, so \d doesn't show a schema at all, and quotes the name of the object. That distinction may be relevant to how stats objects ended up being quoted like this. -- Justin -
Re: extended stats objects are the only thing written like "%s"."%s"
Alvaro Herrera <alvherre@alvh.no-ip.org> — 2021-08-28T18:25:21Z
On 2021-Aug-28, Justin Pryzby wrote: > Note that check constraints and indexes have the same schema as their table, so > \d doesn't show a schema at all, and quotes the name of the object. That > distinction may be relevant to how stats objects ended up being quoted like > this. Yeah, this was the rationale for including the schema name here. I think using "%s.%s" as is done everywhere else is pretty much pointless. It's not usable as an object identifier, since you have to make sure to remove the existing quotes, and unless the names work without quotes, you have to add different quotes. So it looks «nice» but it's functionally more work. -- Álvaro Herrera 39°49'30"S 73°17'W — https://www.EnterpriseDB.com/ "But static content is just dynamic content that isn't moving!" http://smylers.hates-software.com/2007/08/15/fe244d0c.html -
Re: extended stats objects are the only thing written like "%s"."%s"
Tom Lane <tgl@sss.pgh.pa.us> — 2021-08-28T19:48:21Z
Alvaro Herrera <alvherre@alvh.no-ip.org> writes: > I think using "%s.%s" as is done everywhere else is pretty much > pointless. It's not usable as an object identifier, since you have to > make sure to remove the existing quotes, and unless the names work > without quotes, you have to add different quotes. So it looks «nice» > but it's functionally more work. I think what we are doing there is following the message style guideline that says to put double quotes around inserted strings. In this case schema.object (as a whole) is the inserted string. People often confuse this with SQL double-quoted identifiers, but it has nothing whatsoever to do with SQL's rules. (It's easier to make sense of this rule in translations where the quote marks are not ASCII double-quotes ... like your example with «nice».) In short: Justin is right, this should not be done this way. regards, tom lane
-
Re: extended stats objects are the only thing written like "%s"."%s"
Alvaro Herrera <alvherre@alvh.no-ip.org> — 2021-08-30T18:06:02Z
On 2021-Aug-28, Tom Lane wrote: > I think what we are doing there is following the message style > guideline that says to put double quotes around inserted strings. > In this case schema.object (as a whole) is the inserted string. > People often confuse this with SQL double-quoted identifiers, but it > has nothing whatsoever to do with SQL's rules. (It's easier to make > sense of this rule in translations where the quote marks are not > ASCII double-quotes ... like your example with «nice».) > > In short: Justin is right, this should not be done this way. I don't agree with the way we're applying the message guidelines here, but since this is the only place where we do this, I've changed it to the idiomatic way of quoting names. I only backpatched to 14 in order to avoid messing with established output format in released branches, but if people really hate the extra quotes with a passion I'm not opposed to backpatching further. -- Álvaro Herrera Valdivia, Chile — https://www.EnterpriseDB.com/ "World domination is proceeding according to plan" (Andrew Morton)
-
Re: extended stats objects are the only thing written like "%s"."%s"
Peter Eisentraut <peter.eisentraut@enterprisedb.com> — 2021-09-22T09:39:52Z
On 30.08.21 20:06, Alvaro Herrera wrote: > On 2021-Aug-28, Tom Lane wrote: > >> I think what we are doing there is following the message style >> guideline that says to put double quotes around inserted strings. >> In this case schema.object (as a whole) is the inserted string. >> People often confuse this with SQL double-quoted identifiers, but it >> has nothing whatsoever to do with SQL's rules. (It's easier to make >> sense of this rule in translations where the quote marks are not >> ASCII double-quotes ... like your example with «nice».) >> >> In short: Justin is right, this should not be done this way. > > I don't agree with the way we're applying the message guidelines here, > but since this is the only place where we do this, I've changed it to > the idiomatic way of quoting names. I agree that the current situation is not satisfactory. We should think about extending the guidelines to cover this. Note that it's not necessarily enough to say, leave \"%s\".\"%s\" untranslated. For example, this could create inconsistencies with analogous messages that don't include a schema qualification. Also, unless we are being careful about escaping double-quoted strings inside the substituted strings, it wouldn't be entirely correct either. A comprehensive approach across the tree would be preferable, perhaps with additional APIs to support it. Also, the question when schema qualifications should be printed or not should be answered.