Re: insert column monetary type ver 2

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Дмитрий Иванов <firstdismay(at)gmail(dot)com>, pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: insert column monetary type ver 2
Date: 2021-11-20 16:13:13
Message-ID: 0d15bb84-565a-0246-2b8f-a0e637239339@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 11/20/21 04:45, Дмитрий Иванов wrote:
> Good afternoon.
> Sorry about the first example.
> I can't figure out the problem.  Digit group group separator causes an
> insertion error, what should I do?
> lc_monetary = 'ru_RU.UTF-8'
> Digit group group separator is a space.
> Financial type format: 7,649.00 ₽
> DELETE FROM ONLY bpd.class_prop_user_small_val
> WHERE id_class_prop = 74502;
> Initial version of the data:
> INSERT INTO bpd. class_prop_user_small_val (id_class_prop,
> timestamp_class, val_int, val_boolean, val_varchar, val_real,
> val_numeric, val_date, val_time, val_interval, val_timestamp, val_money,
> val_double, max_val, round, id_class, id_data_type, inheritance,
> val_bigint, min_val, max_on, min_on, round_on) VALUES (74502,
> '2021-09-08 10: 05:12. 618', NULL, NULL, NULL, NULL, NULL, NULL, NULL,
> NULL, NULL, '7 649.00 ₽', NULL, -1, 2, 6161, 6, false, 0, -1, false,
> false, true);
> ----------
> ERROR: invalid input syntax for type money: "7 649,00 ₽" LINE 6: ...,
> NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '7 649,00 ...
> Corrected
> INSERT INTO bpd. class_prop_user_small_val (id_class_prop,
> timestamp_class, val_int, val_boolean, val_varchar, val_real,
> val_numeric, val_date, val_time, val_interval, val_timestamp, val_money,
> val_double, max_val, round, id_class, id_data_type, inheritance,
> val_bigint, min_val, max_on, min_on, round_on) VALUES (74502,
> '2021-09-08 10: 05:12. 618', NULL, NULL, NULL, NULL, NULL, NULL, NULL,
> NULL, NULL, '7649.00 ₽', NULL, -1, 2, 6161, 6, false, 0, -1, false,
> false, true);
> -----------
> INSERT 0 1
>
> Why does a financial type conversion with a legal regional digit group
> separator cause an error?

Because this(cash.c):

https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/adt/cash.c;h=d093ce80386f4cf61f3127f3cfe77181f4edfed5;hb=HEAD

has this?:

/* cash_in()
91 * Convert a string to a cash data type.
92 * Format is [$]###[,]###[.##]
93 * Examples: 123.45 $123.45 $123,456.78
94 *
95 */

The 1000s(group) separator is determined by LC_NUMERIC and I don't
believe that is used by the money type.

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2021-11-20 17:00:38 Re: pg_dump insert column GENERATED
Previous Message Rob Sargent 2021-11-20 14:35:57 Re: any default columns for tracking / auditing purpose