From: | Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: createdb compares strategy as case-sensitive |
Date: | 2024-04-20 21:53:06 |
Message-ID: | 86ed7de6-2f04-4c38-ae82-7927da98e38e@enterprisedb.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 4/20/24 22:40, Tom Lane wrote:
> Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com> writes:
>> While doing some testing with createdb, I noticed it only accepts
>> file_copy/wal_log as valid strategies, not FILE_COPY/WAL_LOG (which is
>> what the docs say). The same thing applies to CREATE DATABASE.
>
> Hmm, actually it does work in CREATE DATABASE:
>
> regression=# create database foo STRATEGY = FILE_COPY;
> CREATE DATABASE
>
> but it fails in createdb because that does
>
> if (strategy)
> appendPQExpBuffer(&sql, " STRATEGY %s", fmtId(strategy));
>
> and fmtId will double-quote the strategy if it's upper-case, and then
> the backend grammar doesn't case-fold it, and kaboom.
>
Oh, right. I should have tested CREATE DATABASE instead of just assuming
it has the same issue ...
>> The problem is that createdb() does the check using strcmp() which is
>> case-sensitive. IMHO this should do pg_strcasecmp() which is what we do
>> for other string parameters nearby.
>
> Seems reasonable. The alternative could be to remove createdb.c's use
> of fmtId() here, but I don't think that's actually better.
>
Why? It seems to me this is quite close to e.g. LOCALE_PROVIDER, and we
don't do fmtId() for that. So why should we do that for STRATEGY?
regards
--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2024-04-20 22:19:15 | Re: createdb compares strategy as case-sensitive |
Previous Message | Tom Lane | 2024-04-20 20:40:40 | Re: createdb compares strategy as case-sensitive |