2009-01-18 106 views
2

我在PostgreSQL中使用“encoding ='UTF8'”创建了一个数据库,并在其中加载了一些UTF8数据。选择工作正常,但是当我尝试做一个“WHERE UPPER(名称)=‘富’”,在查询时,我得到为什么我不能在PostgreSQL数据库中执行“upper()”?

ERROR: invalid multibyte character for locale 

我的研究似乎表明,这是因为PostgreSQL安装出错“initdb” - 用LANG=en_US而不是LANG=en_US.UTF8。做“SHOW LC_COLLATE”显示“en_US”。我不想转储和重新创建我的所有数据库,因为其中有几个是PostGIS,重新创建这些数据库是非常痛苦的。是否有解决方法,就像做一个适用于UTF8的“UPPER”等效的方法?

更新我落得这样做转储,reinitdb,以及数据库的恢复,这是比我想象的还要好,只是有点搞清楚一个问题,当数据本来是要痛苦少因为postgres用户没有设置PGDATA环境变量,也没有我能找到的任何配置文件或shell脚本。

回答

1

我不认为你想要的解决方法是可行的,但是转储和恢复你的启用PostGIS的数据库应该可以正常工作。我定期使用PostGIS函数和数据与geom对象来转储和恢复数据库。

你有什么样的问题?

+0

我的问题是当我做pg_dumpall时,然后恢复,它开始抱怨重复的函数定义等。 – 2009-01-18 11:40:34

1

您的诊断是正确的,这是PostgreSQL中Unicode的常见问题。安装程序尝试变得聪明,并使用运行它的shell的语言环境初始化:-(

我建议,如果无法转储和恢复数据库,则会出现更严重和更紧急的问题,即大数据。恕我直言,你应该先解决这个问题,然后再发布PostgreSQL的新版本(或硬盘发生故障后)才能真正恢复你的数据。

相关问题