Я создал базу данных в PostgreSQL с помощью «encoding = 'UTF8'» и загрузил в нее некоторые данные UTF8. Выбор работает нормально, но когда я пытаюсь ввести в запросе «WHERE UPPER (name) = 'FOO'», я получаю сообщение об ошибке
ERROR: invalid multibyte character for locale
Мое исследование, кажется, указывает на то, что это связано с тем, что установка PostgreSQL была дополнена "initdb" с LANG=en_US, а не с LANG=en_US.UTF8. Выполнение «SHOW LC_COLLATE» показывает «en_US». Я не хочу, чтобы мне приходилось сбрасывать и воссоздавать все свои базы данных, потому что некоторые из них являются PostGIS, и воссоздавать их - огромная боль. Есть ли обходной путь, например, способ сделать эквивалент «UPPER», который работает для UTF8?
Обновлять В итоге я выполнил дамп, переустановку базы данных и восстановление базы данных, и это было менее болезненно, чем я думал, за исключением небольшой проблемы с выяснением, куда данные должны были отправляться, потому что пользователь postgres не делает этого. t устанавливает переменную среды PGDATA, и ни один конфигурационный файл или сценарий оболочки, которые я смог найти, тоже не заданы.





Я не думаю, что обходной путь, который вы хотите, возможен, но дамп и восстановление ваших баз данных с поддержкой PostGIS должны работать нормально. Я регулярно сбрасываю и восстанавливаю базы данных с функциями PostGIS и данные с объектами geom.
Какие у вас проблемы?
просто примечание для будущих читателей, это, вероятно, произошло из-за сброса схемы и ее перезагрузки поверх существующей схемы, когда все, что вам действительно нужно, это дамп / восстановление данных (с использованием pg_dump, а не pg_dumpall). В любом случае, как вы заметили, на самом деле dump / initdb / restore был подходящим вариантом.
Ваша диагностика верна, это обычная проблема с Unicode в PostgreSQL. Процедура установки старалась быть умной и запускалась с локалью оболочки, в которой она запущена :-(
Я полагаю, что если вы не можете сбросить и восстановить свою базу данных, у вас есть проблема более серьезная и более срочная, чем ввод данных в верхний регистр. IMHO, вы должны сначала решить эту проблему, прежде чем вам действительно нужно будет восстанавливать свои данные после выпуска новой версии PostgreSQL (или после сбоя жесткого диска).
У меня проблема в том, что когда я выполняю pg_dumpall, а затем восстанавливаю, он начинает жаловаться на повторяющиеся определения функций и тому подобное.