上一篇講了在已經安裝了PG數據庫的情況下,安裝全文搜索插件zhparser遇到的問題。在一個全新的環境中安裝帶有全文搜索插件zhparser的PG數據庫,可以使用已經做好的Docker鏡像,在安裝的過程中,我來說說我遇到過的問題,大部分問題來自postgresql鏡像。
1、拉取zhparser的鏡像
基本運行命令:
docker run -p 5432:5432 chenxinaz/zhparser
在docker hub中zhparser項目的地址,https://hub.docker.com/r/chenxinaz/zhparser,這個鏡像基於postgresql的鏡像來做的,包含postgresql的數據庫,不用額外安裝postgresql數據庫。上面的運行命令測試還可以,不建議正式使用。
2、初始化插件
在指定數據庫初始化插件,運行下面SQL:
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION chinese_zh (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;
測試插件是否安裝成功SQL:
select ts_debug('chinese_zh', '白堊紀是地球上海陸分布和生物界急劇變化、火山活動頻繁的時代');
3、關於postgresql鏡像的高級參數
zhparser的可用環境參數大部分來自postgresql鏡像,可以直接查看postgresql進行的環境參數。在初始化容器的時候,不設定容器參數,之后改起來就很麻煩。
3.1、指定數據庫用戶和密碼
docker run -d --name pg -e POSTGRES_PASSWORD=password chenxinaz/zhparser
能指定的環境參數:
- POSTGRES_PASSWORD
- POSTGRES_USER
- POSTGRES_DB
- POSTGRES_INITDB_ARGS
- POSTGRES_INITDB_WALDIR
- PGDATA
3.2、推薦一組比較好用的命令
這組命令能掛載配置目錄,掛載數據庫目錄,掛載初始化目錄,用於數據庫的初始化。
#復制一個配置文件的副本到本地目錄
$ docker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
# 指定配置文件的位置
$ docker run -d \
-p 15432:5432 \
-e POSTGRES_PASSWORD=password \
-v "$本地配置文件位置/postgres.conf":/etc/postgresql/postgresql.conf \
-v "$本地數據文件位置/data":/var/lib/postgresql/data \
-v "$初始化腳本位置/docker-entrypoint-initdb.d":/docker-entrypoint-initdb.d \
--name=pg \
chenxinaz/zhparser \
-c 'config_file=/etc/postgresql/postgresql.conf'
其中"$初始化腳本位置"中能用的腳本,可以是sql文件、壓縮文件、可執行文件。例如:
#!/usr/bin/env bash
# Import SQL
echo -n "=======IMPORT SQL DATA======="
createdb -U postgres test
psql -U postgres test < /docker-entrypoint-initdb.d/test.sql
echo "=======IMPORT SQL DONE======="
其他參考官方項目文檔:https://hub.docker.com/_/postgres。
4、常用備份
4.1、導出數據庫:
docker exec -it pg pg_dump -h localhost -U postgres 數據庫名 >/data/dum.sql
4.2、導入數據庫:
docker exec -i pg psql -U postgres 數據庫名 < /data/dum.sql