中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

postgresql.的簡(jiǎn)單介紹

PostgreSQL全文檢索簡(jiǎn)介

PostgreSQL自帶有一個(gè)簡(jiǎn)易的全文檢索引擎,可以實(shí)現(xiàn)小規(guī)模數(shù)據(jù)量的全文檢索功能。本文我們將引導(dǎo)介紹一下這個(gè)功能,對(duì)于小數(shù)據(jù)量的搜索這個(gè)功能是足夠使用的,而無(wú)需搭建額外的ES等重量級(jí)的全文檢索服務(wù)器。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、永靖網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為永靖等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

PG的全文檢索操作符是 @@ ,當(dāng)一個(gè) tsvector (文檔)和 tsquery (條件)匹配時(shí)返回 true ,并且前后順序無(wú)影響:

和普通的SQL查詢一樣,只要在 WHERE 條件中使用這個(gè)符號(hào)就代表使用全文檢索條件篩選文檔了。如:

@@ 操作符支持隱式轉(zhuǎn)換,對(duì)于 text 類型可以無(wú)需強(qiáng)類型轉(zhuǎn)換( ::tsvector 或 to_tsvector(config_name, text) ),所以這個(gè)操作符實(shí)際支持的參數(shù)類型是這樣的:

tsquery 查詢條件并不是簡(jiǎn)單的正則,而是一組搜索術(shù)語(yǔ),使用并且使用布爾操作符 (AND)、 | (OR)和 ! (NOT)來(lái)組合它們,還有短語(yǔ)搜索操作符 - (FOLLOWED BY)。更詳細(xì)的語(yǔ)法參見 此文檔 。

此外,PostgreSQL還提供了兩個(gè)相對(duì)簡(jiǎn)化的版本 plainto_tsquery 和 phraseto_tsquery 。

plainto_tsquery ( plainto_tsquery([ config regconfig, ] querytext text) returns tsquery )用戶將未格式化的 text 經(jīng)過(guò)分詞之后,插入 符號(hào)轉(zhuǎn)為 tsquery :

phraseto_tsquery ( phraseto_tsquery([ config regconfig, ] querytext text) returns tsquery )行為和 plainto_tsquery 行為類似,但是分詞之后不是插入 而是 - (FOLLOWED BY):

使用索引可以加快全文檢索的速度。對(duì)于全文檢索來(lái)說(shuō),可選的索引類型是 GIN (通用倒排索引)和 GIST (通用搜索樹),官方文檔更推薦使用 GIN索引 。創(chuàng)建一個(gè) GIN 索引的范例:

也可以是一個(gè)連接列:

還可以單獨(dú)創(chuàng)建一個(gè) tsvector 列,為這個(gè)列創(chuàng)建索引:

除了普通的 ORDER BY 條件之外,PostgreSQL為全文檢索提供了兩個(gè)可選的排序函數(shù) ts_rank([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) returns float4 和 ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) returns float4 ,以便實(shí)現(xiàn)基于 權(quán)重 的排序。

此外,對(duì)于PostgreSQL 9.6以上的版本還可以使用 RUM index 排序。(注意,這個(gè)是擴(kuò)展,默認(rèn)不包含)。

PostgreSQL默認(rèn)的分詞字典中并不包含中文分詞字典,因此我們必須手工引入。目前一個(gè)比較好的項(xiàng)目是 zhparser ,同時(shí)這個(gè)插件也是阿里云的RDS默認(rèn)包含的。安裝和啟用沒什么好說(shuō)的。值得一提的是分詞配置參數(shù)。

在 CREATE EXTENSION 之后,必須配置分詞參數(shù)才能正確進(jìn)行分詞和查找,否則什么都查不到。官方文檔提供的一個(gè)配置策略是:

n,v,a,i,e,l 這幾個(gè)字母分別表示一種token策略,只啟用了這幾種token mapping,其余則被屏蔽。具體支持的參數(shù)和含義可以用 \dFp+ zhparser 顯示:

WITH simple 表示詞典使用的是內(nèi)置的simple詞典,即僅做小寫轉(zhuǎn)換。根據(jù)需要可以靈活定義詞典和token映射,以實(shí)現(xiàn)屏蔽詞和同義詞歸并等功能。

比如我們看下面這個(gè)例子:

可以看到 江淮 這個(gè)詞組在查詢的時(shí)候被忽略了,我們啟用 j (abbreviation,簡(jiǎn)稱)再看看結(jié)果:

所以實(shí)際使用中要設(shè)置合理的token types,過(guò)少將導(dǎo)致搜索結(jié)果不準(zhǔn)確,過(guò)多將導(dǎo)致性能下降。此外,還有一些諸如 短詞復(fù)合: zhparser.multi_short = f 這一類的控制分詞結(jié)果的選項(xiàng),根據(jù)實(shí)際使用酌情開啟。

postgreSQL的簡(jiǎn)單介紹?

postgreSQL是一款先進(jìn)的開源數(shù)據(jù)庫(kù),擁有非常齊全的自由軟件的對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS),可面向企業(yè)復(fù)雜SQL的OLTP業(yè)務(wù)場(chǎng)景,支持多項(xiàng)企業(yè)級(jí)功能,能解決使用數(shù)據(jù)庫(kù)的各種難題。

PostgreSQL的優(yōu)勢(shì)有很多。它是一個(gè)免費(fèi)的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)服務(wù)器(ORDBMS),在靈活的BSD許可證下發(fā)行。

postgreSQL的特征

函數(shù):通過(guò)函數(shù),可以在數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行指令程序。

索引:用戶可以自定義索引方法,或使用內(nèi)置的 B 樹,哈希表與 GiST 索引。

觸發(fā)器:觸發(fā)器是由SQL語(yǔ)句查詢所觸發(fā)的事件。如:一個(gè)INSERT語(yǔ)句可能觸發(fā)一個(gè)檢查數(shù)據(jù)完整性的觸發(fā)器。觸發(fā)器通常由INSERT或UPDATE語(yǔ)句觸發(fā)。 多版本并發(fā)控制:PostgreSQL使用多版本并發(fā)控制(MVCC,Multiversion concurrency control)系統(tǒng)進(jìn)行并發(fā)控制,該系統(tǒng)向每個(gè)用戶提供了一個(gè)數(shù)據(jù)庫(kù)的"快照",用戶在事務(wù)內(nèi)所作的每個(gè)修改,對(duì)于其他的用戶都不可見,直到該事務(wù)成功提交。

規(guī)則:規(guī)則(RULE)允許一個(gè)查詢能被重寫,通常用來(lái)實(shí)現(xiàn)對(duì)視圖(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、刪除(DELETE)。

數(shù)據(jù)類型:包括文本、任意精度的數(shù)值數(shù)組、JSON 數(shù)據(jù)、枚舉類型、XML 數(shù)據(jù)等。全文檢索:通過(guò) Tsearch2 或 OpenFTS,8.3版本中內(nèi)嵌 Tsearch2。

NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 數(shù)據(jù)庫(kù)的外部數(shù)據(jù)包裝器。

數(shù)據(jù)倉(cāng)庫(kù):能平滑遷移至同屬postgreSQL生態(tài)的GreenPlum,DeepGreen,HAWK 等,使用 FDW 進(jìn)行 ETL。

postgresql無(wú)法正常啟動(dòng)的原因追查

仔細(xì)分析,無(wú)非幾個(gè)原因:

1、log目錄的權(quán)限問(wèn)題,比如log文件指定的目錄postgres用戶無(wú)權(quán)寫入,因此沒有產(chǎn)生任何log文件。檢查了/var/lib/postgresql/11/main的目錄,沒有發(fā)現(xiàn)問(wèn)題。

2、配置文件的權(quán)限問(wèn)題,檢查了/etc/postgresql/11/main目錄,也沒有發(fā)現(xiàn)任何問(wèn)題,postgres用戶是有權(quán)限讀取配置文件的。

3、配置文件有錯(cuò)誤導(dǎo)致無(wú)法正常啟動(dòng)postgresql。排除了上面的兩個(gè)原因,這個(gè)應(yīng)該是最大的原因了。但是,錯(cuò)誤在哪里呢?沒有給出提示??!

?嘗試了service postgresql start, pg_ctrcluster, pg_ctl均無(wú)法給出任何提示,后來(lái)才想明白,這幾個(gè)都是對(duì)postmaster的腳本封裝啊,也許這些封裝忽略了什么重要的信息!應(yīng)該直接運(yùn)行postmaster才能得到直接的出錯(cuò)提示的!果然,執(zhí)行/usr/lib/postgresql/11/bin/下的postmaster給出了提示,執(zhí)行語(yǔ)句:

?看到這里立刻明白了:我將postgresql.conf中的lc_messages改為了 en_US.UTF-8,可是沒有產(chǎn)生en_US.UTF-8的locale文件??!于是修改/etc/locales.gen文件添加en_US.UTF-8,執(zhí)行l(wèi)ocales.gen,再次啟動(dòng)postgresql,成功!

PostgreSQL服務(wù)器啟動(dòng)及關(guān)閉方法

1. 啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器(posgres用戶):

[postgres@localhost bin]$ postgres -D /opt/postgresql/data/ /opt/postgresql/log/pg_server.log 21

[1] 4508

當(dāng)然如果設(shè)置了環(huán)境變量

PGDATA=/opt/postgresql/data

export PGDATA

后,可使用pg_ctl工具進(jìn)行啟動(dòng):

[postgres@localhost log]$ pg_ctl start -l /opt/postgresql/log/pg_server.log

pg_ctl: another server might be running; trying to start server anyway

pg_ctl: could not start server

Examine the log output.

[postgres@localhost log]$

因?yàn)橹耙呀?jīng)啟動(dòng),所以打印“another server might be running”。此時(shí),查看日志,有如下信息:

[postgres@localhost log]$ cat pg_server.log

FATAL: lock file "postmaster.pid" already exists

HINT: Is another postmaster (PID 4491) running in data directory "/opt/postgresql/data"?

[postgres@localhost log]$

當(dāng)然,最簡(jiǎn)的.啟動(dòng)方式是:

[postgres@localhost ~]$ pg_ctl start

server starting

[postgres@localhost ~]$ LOG: database system was shut down at 2011-07-09 13:58:00 CST

LOG: autovacuum launcher started

LOG: database system is ready to accept connections

如果要在操作系統(tǒng)啟動(dòng)時(shí)就啟動(dòng)PG,可以在/etc/rc.d/rc.local 文件中加以下語(yǔ)句:

/opt/postgresql/bin/pg_ctl start -l /opt/postgresql/log/pg_server.log -D /opt/postgresql/data

2.關(guān)閉服務(wù)器

最簡(jiǎn)單方法:

[postgres@localhost ~]$ pg_ctl stop

waiting for server to shut down.... done

server stopped

與Oracle相同,在關(guān)閉時(shí)也可采用不同的模式,簡(jiǎn)介如下:

SIGTERM

不再允許新的連接,但是允許所有活躍的會(huì)話正常完成他們的工作,只有在所有會(huì)話都結(jié)束任務(wù)后才關(guān)閉。這是智能關(guān)閉。

SIGINT

不再允許新的連接,向所有活躍服務(wù)器發(fā)送 SIGTERM(讓它們立刻退出),然后等待所有子進(jìn)程退出并關(guān)閉數(shù)據(jù)庫(kù)。這是快速關(guān)閉。

SIGQUIT

令 postgres 向所有子進(jìn)程發(fā)送 SIGQUIT 并且立即退出(所有子進(jìn)程也會(huì)立即退出),而不會(huì)妥善地關(guān)閉數(shù)據(jù)庫(kù)系統(tǒng)。這是立即關(guān)閉。這樣做會(huì)導(dǎo)致下次啟動(dòng)時(shí)的恢復(fù)(通過(guò)重放 WAL 日志)。我們推薦只在緊急的時(shí)候使用這個(gè)方法。

SIGKILL

此選項(xiàng)盡量不要使用,這樣會(huì)阻止服務(wù)器清理共享內(nèi)存和信號(hào)燈資源,那樣的話你只能在啟動(dòng)服務(wù)器之前自己手工做這件事。另外,SIGKILL 直接把 postgres 殺掉,而不會(huì)等它把信號(hào)中繼給它的子進(jìn)程,因此我們還需要手工殺掉每個(gè)獨(dú)立子進(jìn)程。

使用方法舉例:

[postgres@localhost ~]$ pg_ctl stop -o SIGTERM

LOG: received smart shutdown request

LOG: autovacuum launcher shutting down

waiting for server to shut down....LOG: shutting down

LOG: database system is shut down

done

server stopped

[postgres@localhost ~]$

最快速關(guān)閉方法:kill postgres 進(jìn)程

[postgres@localhost ~]$ kill -INT `head -1 /opt/postgresql/data/postmaster.pid`

[postgres@localhost ~]$ LOG: received fast shutdown request

LOG: aborting any active transactions

LOG: autovacuum launcher shutting down

LOG: shutting down

LOG: database system is shut down

附:postgre啟動(dòng)后的進(jìn)程,如下:

[postgres@localhost ~]$ ps -ef|grep post

root 4609 4543 0 13:57 pts/2 00:00:00 su - postgres

postgres 4610 4609 0 13:57 pts/2 00:00:00 -bash

postgres 4724 1 0 14:08 pts/2 00:00:00 /opt/postgresql/bin/postgres

postgres 4726 4724 0 14:08 ? 00:00:00 postgres: writer process

postgres 4727 4724 0 14:08 ? 00:00:00 postgres: wal writer process

postgres 4728 4724 0 14:08 ? 00:00:00 postgres: autovacuum launcher process

postgres 4729 4724 0 14:08 ? 00:00:00 postgres: stats collector process

postgres 4752 4610 0 14:11 pts/2 00:00:00 ps -ef

postgres 4753 4610 0 14:11 pts/2 00:00:00 grep post

[postgres@localhost ~]$

文章名稱:postgresql.的簡(jiǎn)單介紹
轉(zhuǎn)載注明:http://www.rwnh.cn/article12/dsdjodc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷推廣、軟件開發(fā)網(wǎng)站維護(hù)、定制網(wǎng)站商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
兰西县| 虞城县| 宜州市| 白河县| 三明市| 和静县| 营口市| 甘洛县| 郧西县| 乌拉特中旗| 平邑县| 墨江| 元江| 海城市| 且末县| 荔浦县| 灵武市| 开江县| 浠水县| 武城县| 霍林郭勒市| 米泉市| 忻城县| 盱眙县| 囊谦县| 城固县| 永登县| 伊通| 永和县| 临颍县| 贡觉县| 宿州市| 庆云县| 遵化市| 拉孜县| 北安市| 东丽区| 西畴县| 凭祥市| 马尔康县| 闽清县|