Проблемы с COLLATE в PostgreSQL 12 - PullRequest
1 голос
/ 10 января 2020

Моя проблема:

Я работаю в Windows 10, и мой компьютер настроен на португальский (pt_BR);

Я создаю базу данных в PostgreSQL, где я некоторые столбцы должны оставаться на португальском, а другие - в en_US, а именно те, которые хранят числа и валюту. Мне нужно $ вместо R $ и 1000,00 вместо 1.000,00.

Я попытался создать столбцы таким образом, используя инструкцию COLLATE, как:

CREATE TABLE crm.TESTE (
    prodserv_id varchar(30) NOT NULL,
    prodserv_name varchar(140) NULL,
    fk_prodservs_rep_acronym varchar(4) NULL,
    prodserv_price numeric null collate "en_US",
    CONSTRAINT pk_prodservs_prodserv_id PRIMARY KEY (prodserv_id)
);

Но я получаю сообщение об ошибке :

SQL Ошибка [42704]: ОШИБКА: сортировка "en_US" для кодировки "UTF8" не существует

Метаданные базы данных показывают кодировку по умолчанию: UTF8 и Collate Португальский_Бразилия.1252

Он будет развернут у моего провайдера, который работает Linux.

Любые предложения будут с благодарностью. Заранее спасибо.

1 Ответ

1 голос
/ 10 января 2020

Сличение определяет, как строки сравниваются. Он не применим к числовым данным.

Кроме того, PostgreSQL использует параметры сортировки операционной системы, что вызывает проблемы при переносе базы данных из Windows в другие операционные системы. Параметры сортировки будут называться English на Windows и en_US.utf8 в операционных системах, использующих glib c.

Чтобы влиять на форматирование чисел и символов валюты, установите lc_numeric и lc_monetary параметры соответственно (English на Windows, en_US в другом месте). Обратите внимание, что хотя lc_monetary влияет на строковое представление типа данных money, эти настройки не влияют на строковое представление чисел. Вам нужно использовать to_char вот так:

to_char(1000, '999G999G999D00 L');
...