Thread

  1. BUG #17407: trim trims more than expected

    PG Bug reporting form <noreply@postgresql.org> — 2022-02-16T10:13:19Z

    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)
    
    
  2. Re:BUG #17407: trim trims more than expected

    Sergei Kornilov <sk@zsrv.org> — 2022-02-16T11:03:41Z

    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
    
    
    
    
  3. Re: BUG #17407: trim trims more than expected

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2022-02-16T15:12:38Z

    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)