Re: function to_char(unknown) is not unique at character 8

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: gzh <gzhcoder(at)126(dot)com>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: function to_char(unknown) is not unique at character 8
Date: 2023-07-06 11:54:19
Message-ID: CAFj8pRDnfsX63a=JiMYrizBUsPb9DG3B8UO-ox3F=hRC2p0Z4g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

čt 6. 7. 2023 v 13:38 odesílatel gzh <gzhcoder(at)126(dot)com> napsal:

> Thank you very much for taking the time to reply to my question.
> There are a lot of TO_CHAR in my application, and there is a high cost of
> modifying the code,
> is there another solution to solve the problem without modifying the code?
>

There is one dirty workaround, and because it is dirty, I don't want to
push it to orafce.

You can create own function to_char

CREATE OR REPLACE FUNCTION oracle.to_char(text)
RETURNS text AS $$
SELECT $1
$$ LANGUAGE sql IMMUTABLE STRICT;

This version will be preferred and fix this issue. On second thought, the
behavior can be a little bit different than before.

I have a question. Why do you use the to_char(string) function? Instead
to_char('text') you can write only 'text'.

>
>
> At 2023-07-06 19:21:24, "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com> wrote:
>
> Hi
>
> čt 6. 7. 2023 v 11:19 odesílatel gzh <gzhcoder(at)126(dot)com> napsal:
>
>> Hi,
>>
>>
>> I upgraded the version of PostgreSQL from 12.6 to 12.13,
>>
>> when I execute the sql below , the to_char function caused the following
>> error.
>>
>>
>> ---------------SQL------------------
>>
>> select TO_CHAR('1000000');
>>
>>
>> ERROR: function to_char(unknown) is not unique at character 8
>>
>> HINT: Could not choose a best candidate function. You might need to add
>> explicit type casts.
>>
>>
>> There is no problem before the upgrade and to_char function comes from
>> the Orafce extension.
>>
>> The configuration of the old and new databases is as follows.
>>
>>
>> Database server (old): PostgreSQL 12.6(orafce3.13)
>>
>> Database server (new): PostgreSQL 12.13(orafce3.24)
>>
>>
>> The new database has successfully installed the orafce 3.24 extension.
>>
>> It does not occur in "PostgreSQL 12.6 and orafce 3.13",
>>
>> but occurs in "PostgreSQL 12.13 and orafce 3.24",
>>
>> so either the difference between 12.6 and 12.13 or the difference between
>> orafce 3.13 and 3.24 is suspicious.
>>
>>
>> What is the reason for the problem and how to fix the error?
>>
>
> The new orafce contains to_char for numeric types and to_char for
> timestamp. Old orafce had to_char function (with one argument) only for
> numeric types.
>
> This is the reason why the system doesn't know if a string of unknown type
> (postgresql string literal) should be processed as numeric or as a
> timestamp.
>
> The best fix is specify used type like
>
> (2023-07-06 13:19:33) postgres=# select oracle.TO_CHAR('1000000'::int);
> ┌─────────┐
> │ to_char │
> ╞═════════╡
> │ 1000000 │
> └─────────┘
> (1 row)
>
> Regards
>
> Pavel
>
>>
>> Regards
>>
>>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Paula Berenguel 2023-07-06 12:34:18 Logical replication restarts
Previous Message gzh 2023-07-06 11:38:37 Re: function to_char(unknown) is not unique at character 8