Задать вопрос
@hbrmdc

Postgres: полнотекстовой поиск не ищет на Debian слова с буквами в верхнем регистре?

Postgres 9.5

Полнотекстовой поиск работает нормально в тестовой среде на моем макбуке. Но на VPS он не может найти слова с заглавными буквами. Проблема только с русским языком.

Это таблица, созданная для индексации данных с целью полнотекстового поиска:

CREATE TABLE public.tsv
(
  name character varying NOT NULL,
  id uuid NOT NULL,
  tsv tsvector NOT NULL,
  image boolean DEFAULT false,
  source uuid,
  "user" uuid,
  CONSTRAINT tsv_pkey PRIMARY KEY (id),
  CONSTRAINT source FOREIGN KEY (source)
      REFERENCES public.source (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.tsv
  OWNER TO postgres;


Это пример запроса, который я делаю к той таблице:

select id, name, image, type from tsv where tsv @@ to_tsquery('russian', 'кант') limit 18


На макбуке в результате я получаю то, что надо, а именно вот эту строку из базы данных:
"Кант – Пол Стретерн";
"2779061c-3b58-4684-890c-cc24e8f5cdc0";
"'1724–1804 –':7 '«долга»':42 '«категорическ':44 'Аристотел':18 'Имману':5 'Кант':1A,6,24,46 'Платон':16 'Пол':3A 'Стрем':19 'Стретерн':4A 'Философ':41 'границ':21 'действительн':33 'императива»':45 'классическ':10 'крупн':13 'легкост':48 'лиш':35 'мыслител':14 'немецк':9 'определ':20 'опрокидыва':49 'основоположник':8 'позна':32 'познан':23 'получ':36 'представлен':40 'результат':54 'сам':12 'совершен':59 'спекулятивн':51 'стал':58 'субъективн':39 'теор':52 'указа':25 'философ':11,55 'человек':29 'человеческ':22 '–':2A";
"2779061c-3b58-4684-890c-cc24e8f5cdc0"


Но абсолютно тот же запрос не находит абсолютно ту же строку, когда база данных расположена в VPS на Debian. Если я ищу слова, проиндексированные без заглавных букв - все работает ок, на английском вообще все работает ок.

Это SQL pane рабочей базы данных:

CREATE DATABASE production_v2
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'en_US.UTF-8'
       LC_CTYPE = 'en_US.UTF-8'
       CONNECTION LIMIT = -1;


А эта - с тестовой:

CREATE DATABASE test_database
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'en_US.UTF-8'
       LC_CTYPE = 'en_US.UTF-8'
       CONNECTION LIMIT = -1;


Предполагаю, что Debian как-то не корректно воспринимает верхний регистр. Как это поправить? Вариант "перевести все в нижний регистр еще в процессе индексации" не подходит.
  • Вопрос задан
  • 388 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
$ psql
=$ show all;
покажите что в поле setting поля name со значениями lc_* для обоих инстансов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы