Я использую docker изображение для postgres
postgres:
image: postgres:9.6
ports:
- '5432:5432'
container_name: 'postgresql'
working_dir: /app
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
LC_COLLATE: 'sv_SE.UTF-8'
LC_CTYPE: 'sv_SE.UTF-8'
volumes:
- ./data/postgresql:/var/lib/postgresql/data
- ./postgres/locale.conf:/etc/locale.conf
networks:
- php
Я хочу установить swedi sh сопоставление с моим столбцом category_name
в category
таблице, для этого я просто пытаюсь выполнить этот запрос
ALTER TABLE category ALTER COLUMN category_name SET DATA TYPE character varying(255) COLLATE "sv_SE.UTF-8"
> ERROR: collation "sv_SE.UTF-8" for encoding "UTF8" does not exist
после этого я выполнил вручную в своем контейнере
root@95494dd4339b:/app# locale-gen sv_SE.utf8 && dpkg-reconfigure locales
Generating locales (this might take a while)...
Generation complete.
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_COLLATE = "sv_SE.UTF-8 UTF-8",
LC_CTYPE = "sv_SE.UTF-8 UTF-8",
LANG = "en_US.utf8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
Configuring locales
-------------------
Locales are a framework to switch between multiple languages and allow users to
use their language, country, characters, collation order, etc.
Please choose which locales to generate. UTF-8 locales should be chosen by
default, particularly for new installations. Other character sets may be useful
for backwards compatibility with older systems and software.
1. All locales
Локали, которые должны быть сгенерированы: 1
и выбор 1 и после загрузки всех локалей, которые я видел
416 sv_SE.UTF-8
Default locale for the system environment: 416
, но после этого все еще сталкивался с той же ошибкой
> ERROR: collation "sv_SE.UTF-8" for encoding "UTF8" does not exist
при проверке pg_collation
Я не нашел свой sv_SE.UTF-8
myuser=# SELECT * FROM pg_collation;
collname | collnamespace | collowner | collencoding | collcollate | collctype
------------+---------------+-----------+--------------+-------------+----------
--
default | 11 | 10 | -1 | |
C | 11 | 10 | -1 | C | C
POSIX | 11 | 10 | -1 | POSIX | POSIX
C.UTF-8 | 11 | 10 | 6 | C.UTF-8 | C.UTF-8
en_US | 11 | 10 | 6 | en_US.utf8 | en_US.utf
8
en_US.utf8 | 11 | 10 | 6 | en_US.utf8 | en_US.utf
8
ucs_basic | 11 | 10 | 6 | C | C
(7 rows)
myuser=#
как установить swedi sh сопоставление для моей колонки?
ОБНОВЛЕНИЕ
после ручного выполнения в postgres контейнере locale-gen sv_SE.utf8 && dpkg-reconfigure
имеет следующий результат:
root@95494dd4339b:/app# locale -a | grep sv_SE
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
sv_SE
sv_SE.iso88591
sv_SE.iso885915
sv_SE.utf8
Я пытаюсь создать новую базу данных, но столкнулся с той же ошибкой ... что не так ??
myuser=# CREATE DATABASE test WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'sv_SE.UTF-8' LC_CTYPE = 'sv_SE.UTF-8';
ERROR: invalid locale name: "sv_SE.UTF-8"
myuser=#
SELECT * FROM category ORDER BY category_name COLLATE "sv_SE";
, но все еще столкнулся с ошибкой > ERROR: collation "sv_SE" for encoding "UTF8" does not exist
может потребоваться перезагрузка службы или что-то в этом роде для применения изменений?