From: | Bryn Llewellyn <bryn(at)yugabyte(dot)com> |
---|---|
To: | pgsql-general list <pgsql-general(at)lists(dot)postgresql(dot)org> |
Subject: | ('dog$house' = quote_ident('dog$house')) is surprisingly FALSE |
Date: | 2022-10-06 00:16:51 |
Message-ID: | CA4667FA-A71E-4ECD-B9EE-4A2F8929CB22@yugabyte.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
The doc for "quote_ident()" says this:
«
https://www.postgresql.org/docs/14/functions-string.html
Returns the given string suitably quoted to be used as an identifier in an SQL statement string. Quotes are added only if necessary (i.e., if the string contains non-identifier characters or would be case-folded). Embedded quotes are properly doubled.
»
B.t.w, the value of "quote_ident()" rests on the distinction between a name (what you provide with the function's actual argument) and an identifier (what it returns). Some of you flatly reject (borrowing a phrase from Tom) the distinction between these two terms of art. Oh well…
Try this:
create table dog$(n int); -- OK
create table $dog(n int); -- Bad
create table "$dog"(n int); -- OK
These outcomes are consistent with the rules that say when a proposed name needs to be double-quoted to form its identifier in a SQL statement (or PL/pgSQL source text).
So it's correct for this to return FALSE:
select '$dog' = quote_ident('$dog');
But it's incorrect w.r.t. "quotes are added only if necessary" for this to return FALSE:
select 'dog$' = quote_ident('dog$');
"format()" shows the same error when you use the %I placeholder. I suppose that "format()" and "quote_ident()" share the same underlying implementation.
select format('What happens with %I?', 'dog'); -- double quotes are not added
select format('What happens with %I?', 'dog$'); -- double quotes are added
From | Date | Subject | |
---|---|---|---|
Next Message | David G. Johnston | 2022-10-06 00:31:48 | Re: ('dog$house' = quote_ident('dog$house')) is surprisingly FALSE |
Previous Message | Josef Šimánek | 2022-10-05 21:39:24 | Re: Postgres calendar? |