# PostgreSQL 16.11: поиск в Mail и локаль БД Краткая справка по влиянию локали и настройкам PostgreSQL 16.x на поиск писем в приложении Mail. ## Роль локали (не параметр `lang`) - **`lang`** в F7cloud — язык интерфейса; на работу поиска в БД не влияет. - На поиск по тексту (отправитель, получатель, тема) влияет **локаль базы PostgreSQL**: - **`datcollate`** / **`datctype`** (или на уровне кластера: **`lc_collate`**, **`lc_ctype`**). - Проверка текущей локали и кодировки (только чтение): ```sql SELECT datname, datcollate, datctype, pg_encoding_to_char(encoding) AS encoding FROM pg_database WHERE datname = current_database(); ``` ## Поведение при локали C / POSIX (типично для «по умолчанию») | Что проверяли | Результат | |---------------|-----------| | `LOWER('Дмитрий')` | Строка не меняется (кириллица не приводится к нижнему регистру). | | `'Дмитрий Мельник' ILIKE '%дми%'` | `false` (регистр для кириллицы не игнорируется). | | `'Дмитрий Мельник' LIKE '%Дми%'` | `true`. | Поэтому в Mail для поиска по отправителю/получателю/теме при «голом» запросе (например, «Дми») в запрос подставляются оба варианта: как введено и в нижнем регистре — поиск не зависит от локали БД. ## Рекомендации для PostgreSQL 16.11 1. **Оставить как есть** С текущей реализацией Mail поиск по кириллице работает и при `datctype = C`. 2. **Если нужна «нативная» поддержка регистронезависимого поиска в БД** Создавать базу с локалью, поддерживающей нужный язык, например: - `ru_RU.UTF-8` — для кириллицы; - `en_US.UTF-8` — для латиницы. Локаль задаётся при создании кластера (`initdb -D ... --locale=ru_RU.UTF-8`) или при создании БД (`CREATE DATABASE ... LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8'`). Сменить локаль у уже существующей БД без дампа/восстановления нельзя. 3. **Кодировка** Для Mail важно использовать **UTF-8** (`encoding = UTF8`). В PostgreSQL 16.11 по умолчанию так и есть при создании БД из шаблона с UTF-8. ## Полезные ссылки (PostgreSQL 16) - [24.1. Locale Support](https://www.postgresql.org/docs/16/locale.html) - [24.2. Collation Support](https://www.postgresql.org/docs/16/collation.html) - [F.10. citext — case-insensitive character string type](https://www.postgresql.org/docs/16/citext.html)