PostgreSQL. Проблема поиска в БД из-за кодировки сервера?

На рабочем сервере возникла проблема поиска в таблице БД PostgreSQL, в то время как на отладочном сервере все отлично ищется. Дамп БД с отладочного серевера перенесён на рабочий. Идентичность бэк-кода поиска проверена.

Кодировки на отладочном сервере:

mybase=# SHOW SERVER_ENCODING;
 server_encoding
-----------------
 UTF8
(1 строка)


mybase=# select datname, pg_encoding_to_char(encoding) from pg_database;
  datname  | pg_encoding_to_char
-----------+---------------------
 postgres  | UTF8
 template1 | UTF8
 template0 | UTF8
 mybase    | UTF8
(4 строки)

Кодировки на рабочем сервере:

mybase=# SHOW SERVER_ENCODING;
 server_encoding
-----------------
 UTF8
(1 row)

mybase=# select datname, pg_encoding_to_char(encoding) from pg_database;
  datname  | pg_encoding_to_char
-----------+---------------------
 postgres  | LATIN1
 template1 | LATIN1
 template0 | LATIN1
 mybase    | UTF8
(4 rows)

Как видим, кодировка на обоих серверах идентичная и кодировка пользовательской БД "mybase" - UTF8, но кодировка системных таблиц разная. Может ли это как то повлиять на поиск, когда в случае поиска на сервере разработки есть выдача результатов, а на рабочем сервере найти не может по такой же ключевой фразе. Код поиска и дампы БД идентичны.

Функционал поиска:

if request.method == 'POST':    # post-запрос после form.submit()
    context = search(request)   # обработка поискового запроса
    # ... 

def search(request):
    """ Поиск по услугам. """
    # итоговый набор групп услуг по всем поисковым словам
    collections_all = Collection.objects.none()  
    category = ''
    searchForm = SearchForm(request.POST)
    if searchForm.is_valid:
        search_obj = searchForm.save()
        # поиск по каждому слову из фразы запроса
        words = search_obj.text.split()  # разбиение поиска на слова
        for word in words:
            # исключая однобуквенные слова - предлоги, союзы, местоимения и др.
            if len(word) > 2:  
                # услуги, содержащие ключевое слово
                services = Price.objects.filter(name__icontains=word).values_list('collection', flat=True) # набор услуг со словом
                # группы услуг, содержащие найденные услуги 
                collections = Collection.objects.filter(id__in=services)
                # накопление групп услуг по каждому слову
                collections_all |= collections  # объединить без дубликатов
        category = 'По запросу "<span class="teal">' + search_obj.text + '</span>" ' + (
            'найдены следующие группы медицинских услуг:' if collections_all else 'услуги не найдены!')
    context = {'category': category, 'searchResult_fl': collections_all.exists(), 'collections': collections_all}
    return context

В чём может быть причина такого поведения?


Ответы (0 шт):