久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在PostgreSQL中安裝擴展模塊

140次閱讀
沒有評論

共計 3318 個字符,預計需要花費 9 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這期內容當中丸趣 TV 小編將會給大家帶來有關怎么在 PostgreSQL 中安裝擴展模塊,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

安裝模塊

首先安裝 postgresql-contrib 包并重啟數據庫服務器,然后檢查 contrib 目錄看是否包含一些可用模塊:

 

sudo apt-get install postgresql-contrib
sudo /etc/init.d/postgresql-8.4 restart
cd /usr/share/postgresql/8.4/contrib/
ls

然后我們創建一個名為 module_test 的數據庫:
 

su postgres
createdb module_test

然后我們將模塊 chkpass, fuzzystrmatch, isn 和 hstore 應用到 module_test 數據庫,執行下面命令即可:
 

psql -d module_test -f chkpass.sql
psql -d module_test -f fuzzystrmatch.sql
psql -d module_test -f isn.sql
psql -d module_test -f hstore.sql

接下來,我們來看看每個模塊是如何使用的。
 
使用 chkpass

chkpass 模塊引入一個新的數據類型“chkpass”這個類型用來存儲一個加密的字段,例如密碼。使用方法可以從下面的 SQL 里看到,存入 chkpass 字段的字符串會自動進行加密:

 

CREATE TABLE accounts (username varchar (100), password chkpass);
INSERT INTO accounts(username,  password  ) VALUES (  user1  ,  pass1  );
INSERT INTO accounts(username,  password  ) VALUES (  user2  ,  pass2  );

然后我們可以通過下面的 SQL 進行身份認證:
 

SELECT count (*) from accounts where username=  user1  and password =  pass1

其中 = 操作符使用了 eq(column_name, text) 方法,該方法由 chkpass 模塊提供用于測試是否相等。chkpass 使用 Unix 的 crypt() 函數,因此加密效果比較弱,該函數只對字符串的前 8 位進行加密,只要前 8 位相同的字符串就被認為是相等的。因此不建議在實際生產環境中使用 chkpass 模塊,建議使用 pgcrypto 模塊。
 
使用 fuzzystrmatch

該模塊提供的函數包括:soundx(), difference(), levenshtein() 和 metaphone()。soundx() 和 metaphone() 是語音算法,將文本字符串轉成基于發音的代碼字符串。而 difference() 和 levenshtein() 則返回數值代表兩個輸入字符串的相似度。

讓我們先看看 levenshtein() 和 metaphone() 函數:
 

SELECT levenshtein(  foodlets  ,  booklets  );

該查詢返回 2,很顯然。

metaphone() 函數需要兩個參數,一個是文本字符串,另外一個是輸出代碼的最大長度的:
 

SELECT metaphone(  foodlets  , 6);
SELECT metaphone(  fudlets  , 6);

如果你試圖獲取兩個字符串的 Levenshtein 距離,那將返回 0:
 

SELECT levenshtein(  FTLTS  ,  FTLTS  );

這意味著兩個字符串發音類似。

fuzzystrmatch 用在網站實現搜索功能上是非常有用的,而且可用于實現拼寫檢查和錯誤關鍵字糾正,相當于是 Google 上的“Did you mean…”

使用 isn

該模塊提供了存儲國際標準數值的數據類型,例如 International Standard Book Numbers (ISBN), International Standard Music Numbers (ISMN), International Standard Serial Numbers (ISSN), Universal Product Codes (UPC), 等等。同時提供了校驗函數、類型轉換函數等等。

讓我們來測試存儲圖書信息:
 

CREATE TABLE books(number isbn13, title varchar (100))
INSERT INTO books(  number  , title) VALUES (  978-03  ,  Rework  );

INSERT 語句將會執行錯誤,因為輸入的字符串不是一個有效的 ISBN 號,而下面的語句就可以正確執行:
 

INSERT INTO books(  number  , title) VALUES (  978-0307463746  ,  Rework  )

如果要將一個 10 位的 ISBN 轉成 13 位的,可以使用 isbn13() 函數:

 

INSERT INTO books(  number  , title) VALUES (isbn13(  0307463745  ),  Rework  )

 
使用 hstore

你肯定已經聽到很多關于 NoSQL 以及 key-value 數據庫的介紹,使用 hstore 模塊可以讓 PostgreSQL 具備 key-value 存儲的功能。

想象你正在處理一個表格,你對表格力列頭的名稱和類型處理沒有任何思路,而 hstore 就可以解決你的問題,hstore 將 key 和 value 都作為文本存儲,值可以為 NULL,但 key 不允許。

我們來創建一個使用 hstore 類型的表,并往表插入一些數據:
 

CREATE TABLE kv_data( id integer , data hstore)
INSERT into kv_data values
(1, hstore(  name  ,  amit  ) || hstore(  city  ,  bangalore  )),
(2, hstore(  name  ,  raghu  ) || hstore(  age  ,  26  )),
(3, hstore(  name  ,  ram  ) || hstore(  age  ,  28  ));

你可以創建你自己的 key,例如“height”,“favourite_book”等等,而 || 運算符用于級聯并列操作。

現在我們已經有一個表和少量測試數據,接下來看看怎么做查詢、更改和刪除操作,假設我們要查詢 city 為 bangalore 的數據,可以使用如下 SQL 語句:
 

SELECT * from kv_data where data-   city  =  bangalore

要獲取表中的平均年齡可以使用如下語句:

 

SELECT avg ((data-   age  ):: integer ) age from kv_data;

這里的 ::integer 用于將文本數據轉成整數,以便可以使用數學函數。

要根據姓名進行排序,方法是:

 

SELECT * from kv_data order by data-   name  desc

將所有城市更改為 delhi:
 

UPDATE kv_data SET data = data || (  city  =   delhi  );

然后刪除 age 這個鍵:

 

UPDATE kv_data set data = delete (data,  age  )

或者刪除名為 amit 的記錄:
 

DELETE from kv_data where data-   name  =  amit

雖然這不是一個真正的 key-value 存儲服務器,但 hstore 還是提供了做為 NoSQL 數據庫足夠的靈活性。

上述就是丸趣 TV 小編為大家分享的怎么在 PostgreSQL 中安裝擴展模塊了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計3318字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 县级市| 论坛| 铜鼓县| 涞源县| 武陟县| 益阳市| 汤原县| 洛阳市| 北流市| 息烽县| 横山县| 鱼台县| 巴东县| 伊川县| 黄石市| 永州市| 庆安县| 谢通门县| 龙门县| 德清县| 广州市| 平果县| 新龙县| 新巴尔虎右旗| 孝昌县| 蒲城县| 奇台县| 罗山县| 福州市| 黄梅县| 疏附县| 萨嘎县| 策勒县| 黄陵县| 阳城县| 雷波县| 河津市| 平泉县| 遵化市| 双江| 绍兴县|