CentOS Stream9&Postgresql16&Zhparser 安装配置

服务器

腾讯云: 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) 六种分词策略:
    sql 复制代码
    ALTER 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

谢谢你们的观看,我是一个默默潜水的coder,文笔不太好.如果写的有什么不好的地方、感谢你们的指出

相关推荐
打工仔折腾 AI10 分钟前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战
geovindu2 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
颜进强3 小时前
20 · NestJs循环依赖与 forwardRef:容器为什么在环面前会死,"占位再补齐"怎么救
前端·后端·ai编程
颜进强3 小时前
19 · NestJs @Global 落地账:装饰器与 `isGlobal` 参数,各在什么场景上岗
前端·后端·ai编程
她的男孩3 小时前
分片上传的大文件人人可下载:文件模块 isPrivate 在合并时被抹成 false,另有 4 个静默坑
java·后端·架构
颜进强3 小时前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
xn71333 小时前
Personal AI Agent 架构实战:Memory、权限、跨 App 与本地/云端设计
人工智能·后端·agent
谢亮_vipxieliang4 小时前
Go defer、panic与recover核心知识点
开发语言·后端·golang
颜进强4 小时前
17 · 自定义 Provider 四形态:useValue / useClass / useFactory / useExisting 到底在选什么
前端·后端·ai编程
碎觉崽4 小时前
我的 QQ 机器人被腾讯反复踢下线,折腾了半个月才搞明白
后端