Thread: BUG #13744: Postgresql function auto add 's' character to the end of string

BUG #13744: Postgresql function auto add 's' character to the end of string

From
b.phamhuu@jacobs-university.de
Date:
The following bug has been logged on the website:

Bug reference:      13744
Logged by:          Bang
Email address:      b.phamhuu@jacobs-university.de
PostgreSQL version: 9.2.13
Operating system:   Centos 7
Description:

I've a function in Postgresql database. However, every time I run the
function in postgresql, it auto add character 's' behind of the query so it
will be error when execute (for example: WHAT IN HERE: query SELECT uom_id
FROM ps_quantity where id = 11s ). My version is Postgresql 9.2.13. How can
I solve this?

 CREATE OR REPLACE FUNCTION select_field(
    selected_table text,
    selected_field text,
    field_type_sample anyelement,
    where_clause text DEFAULT ''::text)
  RETURNS anyelement AS
$BODY$ DECLARE
    -- Log
    ME  constant text := 'selected_field()';
    -- Local variables
        _qry          varchar := '';
        _result_value ALIAS FOR $0;
    where_clause1 varchar := 'asdasdsad';
    BEGIN
    RAISE NOTICE 'FUNCTION: SELECT_FIELD';
    -- BANGPH
    RAISE NOTICE 'BANGPH - CHANGE 11s to 11';

        _qry := 'SELECT uom_id FROM ps_quantity where id = 11';

    RAISE NOTICE 'WHERE = %s', where_clause1;

    RAISE NOTICE 'WHAT IN HERE: query %s', _qry;

Re: BUG #13744: Postgresql function auto add 's' character to the end of string

From
Michael Paquier
Date:
On Thu, Oct 29, 2015 at 1:57 PM,  <b.phamhuu@jacobs-university.de> wrote:
> The following bug has been logged on the website:
>
> Bug reference:      13744
> Logged by:          Bang
> Email address:      b.phamhuu@jacobs-university.de
> PostgreSQL version: 9.2.13
> Operating system:   Centos 7
> Description:
>
> I've a function in Postgresql database. However, every time I run the
> function in postgresql, it auto add character 's' behind of the query so it
> will be error when execute (for example: WHAT IN HERE: query SELECT uom_id
> FROM ps_quantity where id = 11s ). My version is Postgresql 9.2.13. How can
> I solve this?

You are mistaking the use of '%' and '%s'. When using RAISE NOTICE in
plpgsql you should just use '%' and not '%s' when assigning a variable
in a message. If you are willing to use %s, you can use format():
=# select format('string1: %s, string2: %s', 'titi', 'toto');
            format
------------------------------
 string1: titi, string2: toto
(1 row)
Regards,
--
Michael