pg.ddx.io pgsql-bugs@postgresql.org mailing list archive
help / color / mirror / Atom feed BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
6+ messages / 6 participants
[nested] [flat]
* BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
@ 2024-09-25 07:57 PG Bug reporting form <noreply@postgresql.org>
0 siblings, 2 replies; 6+ messages in thread
From: PG Bug reporting form @ 2024-09-25 07:57 UTC (permalink / raw)
To: pgsql-bugs@lists.postgresql.org; +Cc: zengman@halodbtech.com
The following bug has been logged on the website:
Bug reference: 18632
Logged by: Man Zeng
Email address: zengman@halodbtech.com
PostgreSQL version: 14.10
Operating system: centos-8
Description:
Hi, I found a problem with array separator handling.
The current handling of delimiters is not quite as expected (not very
flexible).
The test SQL and results are shown below.
[postgres@halo-centos-8-release ~]$ psql
psql (14.10)
Type "help" for help.
postgres=# CREATE OR REPLACE FUNCTION arrayfunc()
postgres-# RETURNS _varchar
postgres-# AS $$
postgres$# SELECT '{''a,3'',''b'',''c''}'::_varchar;
postgres$# $$ LANGUAGE SQL;
CREATE FUNCTION
postgres=# -- array cstring
postgres=# SELECT arrayfunc();
arrayfunc
-----------------
{'a,3','b','c'}
(1 row)
postgres=# -- length is 4
postgres=# SELECT array_length(arrayfunc(), 1);
array_length
--------------
4
(1 row)
postgres=# -- first element
postgres=# SELECT (arrayfunc())[1];
arrayfunc
-----------
'a
(1 row)
postgres=# -- second element
postgres=# SELECT (arrayfunc())[2];
arrayfunc
-----------
3'
(1 row)
postgres=# -- other
postgres=# SELECT (arrayfunc())[3];
arrayfunc
-----------
'b'
(1 row)
postgres=# SELECT (arrayfunc())[4];
arrayfunc
-----------
'c'
(1 row)
postgres=# -- The following SQL tests are as expected
postgres=# CREATE OR REPLACE FUNCTION arrayfunc2()
postgres-# RETURNS _varchar
postgres-# AS $$
postgres$# SELECT '{''a-3'',''b'',''c''}'::_varchar;
postgres$# $$ LANGUAGE SQL;
CREATE FUNCTION
postgres=# -- array cstring
postgres=# SELECT arrayfunc2();
arrayfunc2
-----------------
{'a-3','b','c'}
(1 row)
postgres=# -- length is 3
postgres=# SELECT array_length(arrayfunc2(), 1);
array_length
--------------
3
(1 row)
postgres=# -- first element
postgres=# SELECT (arrayfunc2())[1];
arrayfunc2
------------
'a-3'
(1 row)
So should we consider modifying "array_in" to enhance the handling of
separators to be more consistent with people's expectations?
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
@ 2024-09-25 08:31 Erik Wienhold <ewie@ewie.name>
parent: PG Bug reporting form <noreply@postgresql.org>
1 sibling, 0 replies; 6+ messages in thread
From: Erik Wienhold @ 2024-09-25 08:31 UTC (permalink / raw)
To: zengman@halodbtech.com; pgsql-bugs@lists.postgresql.org
On 2024-09-25 09:57 +0200, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference: 18632
> Logged by: Man Zeng
> Email address: zengman@halodbtech.com
> PostgreSQL version: 14.10
> Operating system: centos-8
> Description:
>
> Hi, I found a problem with array separator handling.
> The current handling of delimiters is not quite as expected (not very
> flexible).
> The test SQL and results are shown below.
>
> [postgres@halo-centos-8-release ~]$ psql
> psql (14.10)
> Type "help" for help.
>
> postgres=# CREATE OR REPLACE FUNCTION arrayfunc()
> postgres-# RETURNS _varchar
> postgres-# AS $$
> postgres$# SELECT '{''a,3'',''b'',''c''}'::_varchar;
> postgres$# $$ LANGUAGE SQL;
> CREATE FUNCTION
> postgres=# -- array cstring
> postgres=# SELECT arrayfunc();
> arrayfunc
> -----------------
> {'a,3','b','c'}
> (1 row)
>
> postgres=# -- length is 4
> postgres=# SELECT array_length(arrayfunc(), 1);
> array_length
> --------------
> 4
> (1 row)
>
> postgres=# -- first element
> postgres=# SELECT (arrayfunc())[1];
> arrayfunc
> -----------
> 'a
> (1 row)
>
> postgres=# -- second element
> postgres=# SELECT (arrayfunc())[2];
> arrayfunc
> -----------
> 3'
> (1 row)
You need to double-quote elements that contain the separator:
SELECT '{"''a,3''",''b'',''c''}'::varchar[];
That's also documented in the first paragraph of
https://www.postgresql.org/docs/current/arrays.html#ARRAYS-INPUT
So, not a bug.
> postgres=# -- other
> postgres=# SELECT (arrayfunc())[3];
> arrayfunc
> -----------
> 'b'
> (1 row)
>
> postgres=# SELECT (arrayfunc())[4];
> arrayfunc
> -----------
> 'c'
> (1 row)
>
> postgres=# -- The following SQL tests are as expected
> postgres=# CREATE OR REPLACE FUNCTION arrayfunc2()
> postgres-# RETURNS _varchar
> postgres-# AS $$
> postgres$# SELECT '{''a-3'',''b'',''c''}'::_varchar;
> postgres$# $$ LANGUAGE SQL;
> CREATE FUNCTION
> postgres=# -- array cstring
> postgres=# SELECT arrayfunc2();
> arrayfunc2
> -----------------
> {'a-3','b','c'}
> (1 row)
>
> postgres=# -- length is 3
> postgres=# SELECT array_length(arrayfunc2(), 1);
> array_length
> --------------
> 3
> (1 row)
>
> postgres=# -- first element
> postgres=# SELECT (arrayfunc2())[1];
> arrayfunc2
> ------------
> 'a-3'
> (1 row)
>
> So should we consider modifying "array_in" to enhance the handling of
> separators to be more consistent with people's expectations?
>
--
Erik
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
@ 2024-09-25 09:16 曾满 <zengman@halodbtech.com>
0 siblings, 1 reply; 6+ messages in thread
From: 曾满 @ 2024-09-25 09:16 UTC (permalink / raw)
To: Erik Wienhold <ewie@ewie.name>; pgsql-bugs <pgsql-bugs@lists.postgresql.org>
(Sorry, there was a garbled situation in the last email)
Thank you. I know that the way you said can be handled normally.
postgres=# SELECT ('{''a-3'',''a,3''}'::varchar[]);
varchar
---------------
{'a-3','a,3'}
(1 row)
I wonder if we need to modify array_in so that ''a,3'' and ''a-3'' behave the same and have a uniform style.
Would it be better?
postgres=# SELECT ('{''a-3'',''a,3''}'::varchar[])[1];
varchar
---------
'a-3'
(1 row)
postgres=# SELECT ('{''a-3'',''a,3''}'::varchar[])[2];
varchar
---------
'a
(1 row)
Erik Wienhold<ewie@ewie.name> 在 2024年9月25日 周三 16:32 写道:
On 2024-09-25 09:57 +0200, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference: 18632
> Logged by: Man Zeng
> Email address: zengman@halodbtech.com
> PostgreSQL version: 14.10
> Operating system: centos-8
> Description:
>
> Hi, I found a problem with array separator handling.
> The current handling of delimiters is not quite as expected (not very
> flexible).
> The test SQL and results are shown below.
>
> [postgres@halo-centos-8-release ~]$ psql
> psql (14.10)
> Type "help" for help.
>
> postgres=# CREATE OR REPLACE FUNCTION arrayfunc()
> postgres-# RETURNS _varchar
> postgres-# AS $$
> postgres$# SELECT '{''a,3'',''b'',''c''}'::_varchar;
> postgres$# $$ LANGUAGE SQL;
> CREATE FUNCTION
> postgres=# -- array cstring
> postgres=# SELECT arrayfunc();
> arrayfunc
> -----------------
> {'a,3','b','c'}
> (1 row)
>
> postgres=# -- length is 4
> postgres=# SELECT array_length(arrayfunc(), 1);
> array_length
> --------------
> 4
> (1 row)
>
> postgres=# -- first element
> postgres=# SELECT (arrayfunc())[1];
> arrayfunc
> -----------
> 'a
> (1 row)
>
> postgres=# -- second element
> postgres=# SELECT (arrayfunc())[2];
> arrayfunc
> -----------
> 3'
> (1 row)
You need to double-quote elements that contain the separator:
SELECT '{"''a,3''",''b'',''c''}'::varchar[];
That's also documented in the first paragraph of
https://www.postgresql.org/docs/current/arrays.html#ARRAYS-INPUT
So, not a bug.
> postgres=# -- other
> postgres=# SELECT (arrayfunc())[3];
> arrayfunc
> -----------
> 'b'
> (1 row)
>
> postgres=# SELECT (arrayfunc())[4];
> arrayfunc
> -----------
> 'c'
> (1 row)
>
> postgres=# -- The following SQL tests are as expected
> postgres=# CREATE OR REPLACE FUNCTION arrayfunc2()
> postgres-# RETURNS _varchar
> postgres-# AS $$
> postgres$# SELECT '{''a-3'',''b'',''c''}'::_varchar;
> postgres$# $$ LANGUAGE SQL;
> CREATE FUNCTION
> postgres=# -- array cstring
> postgres=# SELECT arrayfunc2();
> arrayfunc2
> -----------------
> {'a-3','b','c'}
> (1 row)
>
> postgres=# -- length is 3
> postgres=# SELECT array_length(arrayfunc2(), 1);
> array_length
> --------------
> 3
> (1 row)
>
> postgres=# -- first element
> postgres=# SELECT (arrayfunc2())[1];
> arrayfunc2
> ------------
> 'a-3'
> (1 row)
>
> So should we consider modifying "array_in" to enhance the handling of
> separators to be more consistent with people's expectations?
>
--
Erik
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
@ 2024-09-25 10:13 Wolfgang Walther <walther@technowledgy.de>
parent: 曾满 <zengman@halodbtech.com>
0 siblings, 0 replies; 6+ messages in thread
From: Wolfgang Walther @ 2024-09-25 10:13 UTC (permalink / raw)
To: 曾满 <zengman@halodbtech.com>; Erik Wienhold <ewie@ewie.name>; pgsql-bugs <pgsql-bugs@lists.postgresql.org>
曾满:
> I wonder if we need to modify array_in so that ''a,3'' and ''a-3''
> behave the same and have a uniform style.
You are still using single quotes, but two of them. You need to use
**double** quotes, not two single quotes.
''a,3'' is different from "a,3".
With true double quotes:
postgres=# SELECT unnest('{"a-3","a,3"}'::varchar[]);
unnest
--------
a-3
a,3
(2 rows)
Best,
Wolfgang
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
@ 2024-09-25 12:33 David G. Johnston <david.g.johnston@gmail.com>
parent: PG Bug reporting form <noreply@postgresql.org>
1 sibling, 1 reply; 6+ messages in thread
From: David G. Johnston @ 2024-09-25 12:33 UTC (permalink / raw)
To: zengman@halodbtech.com <zengman@halodbtech.com>; pgsql-bugs@lists.postgresql.org <pgsql-bugs@lists.postgresql.org>
On Wednesday, September 25, 2024, PG Bug reporting form <
noreply@postgresql.org> wrote:
> The following bug has been logged on the website:
>
> Bug reference: 18632
> Logged by: Man Zeng
> Email address: zengman@halodbtech.com
> PostgreSQL version: 14.10
> Operating system: centos-8
> Description:
>
> Hi, I found a problem with array separator handling.
> The current handling of delimiters is not quite as expected (not very
> flexible).
>
> So should we consider modifying "array_in" to enhance the handling of
> separators to be more consistent with people's expectations?
>
>
A design being inflexible or not meeting people’s expectations is not a
bug. The system is behaving as documented. And we are not going to be
redefining how valid code is parsed here.
David J.
^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
@ 2024-09-25 14:51 Tom Lane <tgl@sss.pgh.pa.us>
parent: David G. Johnston <david.g.johnston@gmail.com>
0 siblings, 0 replies; 6+ messages in thread
From: Tom Lane @ 2024-09-25 14:51 UTC (permalink / raw)
To: David G. Johnston <david.g.johnston@gmail.com>; +Cc: zengman@halodbtech.com <zengman@halodbtech.com>; pgsql-bugs@lists.postgresql.org <pgsql-bugs@lists.postgresql.org>
"David G. Johnston" <david.g.johnston@gmail.com> writes:
> On Wednesday, September 25, 2024, PG Bug reporting form <
> noreply@postgresql.org> wrote:
>> So should we consider modifying "array_in" to enhance the handling of
>> separators to be more consistent with people's expectations?
> A design being inflexible or not meeting people’s expectations is not a
> bug. The system is behaving as documented. And we are not going to be
> redefining how valid code is parsed here.
Yeah, I seriously doubt that we could change array_in's behavior
for single quotes (to wit, that they are not special in any way)
without breaking existing applications.
regards, tom lane
^ permalink raw reply [nested|flat] 6+ messages in thread
end of thread, other threads:[~2024-09-25 14:51 UTC | newest]
Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2024-09-25 07:57 BUG #18632: Whether you need to consider modifying the array's handling of delimiters? PG Bug reporting form <noreply@postgresql.org>
2024-09-25 08:31 ` Erik Wienhold <ewie@ewie.name>
2024-09-25 12:33 ` David G. Johnston <david.g.johnston@gmail.com>
2024-09-25 14:51 ` Tom Lane <tgl@sss.pgh.pa.us>
2024-09-25 09:16 Re: Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters? 曾满 <zengman@halodbtech.com>
2024-09-25 10:13 ` Wolfgang Walther <walther@technowledgy.de>
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox