On Thu, 13 Dec 2007 13:29:04 +0200 Serge wrote: >lc_collate ru_RU.KOI8-R >lc_ctype ru_RU.KOI8-R ну вот, собственно, и причина засора. LC_COLLATE и LC_CTYPE задаются при инициализации кластера, после чего их изменить нельзя. как следствие, если initdb был выполнен с локалью KOI, получаем проблемы с сортировками и работой ф-ций upper()/lower() во всех БД кластера, кодировка которых отлична от той, с которой кластер инициализировали. существует два способа решения данной проблемы. прервый. сдампить базу, остановить постгрес, удалить содержимое каталога с данными (/var/lib/pgsql/data/*, предварительно сохранив конфиги из него). затем выполнить: echo "LANG=ru_RU.UTF-8" > /var/lib/pgsql/data/.18n поднять постгрес, создать базу, залить в неё содержимое дампа. это официально рекомендованый способ. способ второй. официально его вообще не существует, и ни в одной рассылке по postgresql вам его никогда не расскажут :) сразу предупрежу, что я сам так делать тоже не рекомендую, потому что вероятность потери данных велика. итак. 1. Отключить сеть в postgresql; 2. service postgresql restart. Это позволит сбросить все сетевые соединения и корректно завершить все транзакции; 3. service postgresql stop; 4. cp -a /var/lib/pgsql-root/var/lib/pgsql/data/global/ /root - спасаем служебную информацию; 5. subst "s,KOI8-R,UTF8,g" /var/lib/pgsql-root/var/lib/pgsql/data/global/pg_control - изменяем значения LC_COLLATE и LC_CTYPE 6. su -l postgres -s /bin/bash - получаем shell с правами суперпользователя БД. 7. pg_resetxlog -n /var/lib/pgsql/data - запоминаем значения «Latest checkpoint's NextXID» и «Latest checkpoint's NextOID». разумнее этот этап делать до этапа 5 :) 8. cp -a /var/lib/pgsql/data/pg_xlog /var/lib/pgsql/data/pg_xlog.old - на случай, если вам нужны старые логи транзакций. этап необязательный. 9. pg_resetxlog -o «Latest checkpoint's NextOID» -x «Latest checkpoint's NextXID» -f /var/lib/pgsql/data - чиним служебный файл, который искорёжили на этапе 5. после исправления выведется диагностика, из которой можно будет понять, насколько успешно прошёл процесс. 10. если всё хорошо, и pg_controldata /var/lib/pgsql/data не выдаёт ругани, то можно поднять postgresql. если плохо, то нужно вернуть на место каталоги global и pg_xlog. -- np: As I Lay Dying - Repeating yersterday