服务器
腾讯云: CentOs Stream 9
数据库: Postgresql-16
全文检索中文插件: Zhparser
1.更新dnf
bash
sudo dnf update -y
2.pgsql的安装命令
bash
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql16-server
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16
3. pgsql-devel 依赖安装
bash
dnf --enablerepo=crb install perl-IPC-Run
4.pgsql-devel 安装
bash
sudo dnf install -y postgresql16-devel
5.git 安装
bash
sudo dnf install -y git
6.SCWS 安装
bash
wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 | tar xjf -
cd scws-1.2.3 ; ./configure ; make install
7.Zhparser 安装
bash
git clone https://github.com/amutu/zhparser.git
cd zhparser
PG_CONFIG=/usr/pgsql-16/bin/pg_config make install
注意事项
1. 为什么要配置PG_CONFIG?
因为默认读取不到pg_config,pg16生成的路径和其他版本的不一样,所以需要指定pg_config路径
2. 编译报错提示 -no-opaque-pointers
怎么办?
根据提示文件,我去修改了配置文件,删除掉无效的命令再进行运行,按照7.1进行操作
7.1 Zhparser编译报错
错误内容:
错误处理
vim
打开文件
bash
vim +230 /usr/pgsql-16/lib/pgxs/src/Makefile.global
错误行数在230行左右
修改文件,删除-no-opaque-pointers
并保存,然后重新运行Zhparser 安装命令
PG_CONFIG=/usr/pgsql-16/bin/pg_config make install
原内容
bash
BITCODE_CFLAGS = -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Xclang -no-opaque-pointers -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -O2
BITCODE_CXXFLAGS = -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Xclang -no-opaque-pointers -O
修改后内容
bash
BITCODE_CFLAGS = -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Xclang -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -O2
BITCODE_CXXFLAGS = -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Xclang -O2
pgsql 外网配置
1. 修改postgresql.conf
配置外网ip访问
bash
vim +60 /var/lib/pgsql/16/data/postgresql.conf
bash
listen_addresses = '*' # 允许所有 IP 地址连接
port = 5432 # PostgreSQL 默认端口号
修改后的内容
2. 修改pg_hba.conf
配置允许外网登录的账户
bash
vim +110 /var/lib/pgsql/16/data/pg_hba.conf
bash
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
如果正式环境,DATABASE和USER最好不要使用all,危险!
正常来说按需分配,分配的用户账户只有对应的需要的数据库权限
修改后的内容
3. 重启服务
sudo systemctl restart postgresql-16
享受你的数据库吧,已经可以外网连接了
pgsql基本命令
- 连接pgsql
sudo -u postgres psql
- 说明
-u
[postgres] 指明是用户名,默认的超级用户是这个
- 创建用户和密码
CREATE USER "你的用户名" WITH PASSWORD '你的密码'
;- 说明
用户名
最好用双引号,如果不使用双引号,其实你的用户名在pgsql里面是全部小写,当你用户名有大小写的时候后续使用可能会有坑
- 修改密码
ALTER USER "你的用户名" WITH PASSWORD '你的新密码';
- 为用户分配创建数据库权限
ALTER USER "你的用户名" CREATEDB;
- 为用户分配超级管理员权限
ALTER USER "你的用户名" WITH SUPERUSER;
- 为用户撤销超级用户权限
ALTER USER "你的用户名" WITH NOSUPERUSER;
- 退出pgsql
exit;
pgsql 配置zhparser
- 安装zhparser扩展
CREATE EXTENSION zhparser;
- 说明:
- 需要使用rds_superuser权限账号安装。
- 这个安装是针对单个数据库的安装,所以使用的时候需要在对应数据库下操作
- 创建文本搜索配置
CREATE TEXT SEARCH CONFIGURATION zh_cn (PARSER = zhparser);
- 说明
zh_cn
是命名,有可以随便命名,后续使用的时候需要传入这个命名
- 查看zhparser词典设置
SELECT ts_token_type('zhparser');
查看zh_cn的配置
sql
SELECT * FROM pg_ts_config_map
WHERE mapcfg=(SELECT oid FROM pg_ts_config WHERE cfgname='zh_cn');
-
说明
- 这个是自己进行配置的,所以说词典匹配规则默认自己来的
-
增加zh_cn测试配置
- 添加名词(n)、动词(v)、形容词(a)、成语(i)、叹词(e)和习用语(l) 六种分词策略:
sqlALTER TEXT SEARCH CONFIGURATION zh_cn ADD MAPPING FOR n,v,a,i,e,l WITH simple;
- 说明
- 如果你想要添加其他分词策略,根据词典内容配置即可(这个我现在也在学习了解中)
测试分词效果
sql
SELECT to_tsvector('zh_cn', '想要学的太多,感觉时间不够用');
zh_cn
是要和搜索配置命名一致即可,如果要修改就全部都修改
效果图
pgsql 服务命令
bash
# 停止服务
sudo systemctl stop postgresql-16
# 启动服务
sudo systemctl start postgresql-16
# 重启服务
sudo systemctl restart postgresql-16