PostgreSQL中简单字典生成的词素在从v.9升级到v.11后,对于非拉丁语言,其大小写不会降低
在我们的项目中,我们使用PostgreSQL中简单字典生成的词素在从v.9升级到v.11后,对于非拉丁语言,其大小写不会降低,postgresql,full-text-search,homebrew,collation,postgresql-11,Postgresql,Full Text Search,Homebrew,Collation,Postgresql 11,在我们的项目中,我们使用simpledictionary为不同语言(英语、德语、希腊语、乌克兰语等)使用PostgreSQL的全文搜索功能。在我的本地机器(macOS Mojave)上,我使用自制软件安装了PostgreSQL。在尝试将PostgreSQL从9.5.23版升级到11.10版(基本上我只是删除了旧版本并重新安装)之后,我注意到当我尝试使用to_tsvector函数将文本转换为tsvector数据类型时,当使用非拉丁语时,它停止了文本的小写。如果文本是基于拉丁语(ASCII)的,它仍
simple
dictionary为不同语言(英语、德语、希腊语、乌克兰语等)使用PostgreSQL的全文搜索功能。在我的本地机器(macOS Mojave)上,我使用自制软件安装了PostgreSQL。在尝试将PostgreSQL从9.5.23版升级到11.10版(基本上我只是删除了旧版本并重新安装)之后,我注意到当我尝试使用to_tsvector
函数将文本转换为tsvector
数据类型时,当使用非拉丁语时,它停止了文本的小写。如果文本是基于拉丁语(ASCII)的,它仍然会降低文本的大小写。这个问题只是在我升级到版本11之后才出现的(在我从9.5.23过渡到10.15之后,它仍然像预期的那样工作)
示例(在版本11.10、12.5和13.1上):
这是以前的情况(版本9.5.23和10.15):
我试着阅读所有的发行说明,但我看不到任何与我的问题有关的东西。在报告中仍然指出
简单字典模板通过将输入标记转换为小写
所以我假设API本身没有变化
我怀疑在版本11中,他们更改了一些默认配置参数,这会影响到这一点,但我找不到任何有用的东西
更新:
在psqlshell中运行\l
可以提供以下信息
# 11.10
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
--------------------+-----------------+----------+---------+-------+-------------------------------------
postgres | dmytrosavochkin | UTF8 | C | C |
template0 | dmytrosavochkin | UTF8 | C | C | =c/dmytrosavochkin +
| | | | | dmytrosavochkin=CTc/dmytrosavochkin
template1 | dmytrosavochkin | UTF8 | C | C | =c/dmytrosavochkin +
| | | | |
# 9.5.23
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
--------------------+-----------------+----------+-------------+-------------+-------------------------------------
postgres | dmytrosavochkin | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | dmytrosavochkin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/dmytrosavochkin +
| | | | | dmytrosavochkin=CTc/dmytrosavochkin
template1 | dmytrosavochkin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/dmytrosavochkin +
| | | | | dmytrosavochkin=CTc/dmytrosavochkin
好的,谢谢你的评论,我明白了(谢谢!) 问题恰好出现在自制postgresql公式的设置中。基本上,当我安装的时候postgresql@9.5它正在运行
initdb/usr/local/var/postgresql@9.5
在引擎盖下初始化集群,但当我切换到11.10时,它正在运行initdb--locale=C-E UTF-8/usr/local/var/postgresql@10
将C
设置为默认区域设置,我没有注意到
为了解决这个问题,我通过
rm-rf/usr/local/var删除了初始数据/postgresql@12
然后使用initdb--locale=en_US.UTF-8-E UTF-8/usr/local/var手动重新初始化/postgresql@12
。现在,所有数据库的默认对照是en_US.UTF-8,所有操作都与以前完全相同。您能给出每个系统的区域设置信息吗?例如,\l
SELECT to_tsvector('simple', 'Офісний Менеджер');
'менеджер':2 'офісний':1
SELECT to_tsvector('simple', 'Ελληνικά')
'ελληνικά':1
SELECT ts_lexize('simple', 'Менеджер');
{менеджер}
SELECT ts_lexize('simple', 'Manager');
{manager}
# 11.10
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
--------------------+-----------------+----------+---------+-------+-------------------------------------
postgres | dmytrosavochkin | UTF8 | C | C |
template0 | dmytrosavochkin | UTF8 | C | C | =c/dmytrosavochkin +
| | | | | dmytrosavochkin=CTc/dmytrosavochkin
template1 | dmytrosavochkin | UTF8 | C | C | =c/dmytrosavochkin +
| | | | |
# 9.5.23
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
--------------------+-----------------+----------+-------------+-------------+-------------------------------------
postgres | dmytrosavochkin | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | dmytrosavochkin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/dmytrosavochkin +
| | | | | dmytrosavochkin=CTc/dmytrosavochkin
template1 | dmytrosavochkin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/dmytrosavochkin +
| | | | | dmytrosavochkin=CTc/dmytrosavochkin