BUG #17407: trim trims more than expected

Started by PG Bug reporting formabout 4 years ago3 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 17407
Logged by: trim combined with substring from pattern for gives inconsistent output
Email address: unmesh.joshi126@gmail.com
PostgreSQL version: 12.4
Operating system: Linux 5.15.4-051504-generic
Description:

Expected output

demo=# select trim ('nextval(''' from
substring('nextval(''database_table_id_seq''::regclass)' from
'%#"%_id_seq#"%' for '#' ));
btrim
-----------------------
database_table_id_seq
(1 row)

Unexpected output

demo=# select trim ('nextval(''' from
substring('nextval(''auth_table_id_seq''::regclass)' from '%#"%_id_seq#"%'
for '#' ));
btrim
------------------
uth_table_id_seq
(1 row)

In reply to: PG Bug reporting form (#1)
Re:BUG #17407: trim trims more than expected

Hello
But why don't you expect such a result?

The letter a was definitely mentioned in the list of characters to trim.

select trim('nextval' from 'auth_table_id_seq');
btrim
------------------
uth_table_id_seq

Is expected result. Probably you need some other string manipulation function.

regards, Sergei

#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: PG Bug reporting form (#1)
Re: BUG #17407: trim trims more than expected

On 2022-Feb-16, PG Bug reporting form wrote:

Unexpected output

demo=# select trim ('nextval(''' from
substring('nextval(''auth_table_id_seq''::regclass)' from '%#"%_id_seq#"%'
for '#' ));
btrim
------------------
uth_table_id_seq

Not a bug. trim() receives a *set* of characters to remove, not a
*substring* to remove, so the 'a' in 'auth' is matched to the 'a' in
'nextval(' and gets removed.

You can probably achieve what you want by combining substring() with
position() and char_length(), or by using a regular expression in
regexp_replace().

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"La conclusión que podemos sacar de esos estudios es que
no podemos sacar ninguna conclusión de ellos" (Tanenbaum)