在PostgreSQL上安装并使用扩展模块的教程_数据库其它

安装模块

注意: 我的运行环境是 Ubuntu 10.04 和 PostgreSQL 8.4

首先安装 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 数据库足够的灵活性。

其他有用的模块

这里还有几个你可能会用到的模块:

  •     Pgcrypto 提供了哈希和加密函数,支持 SHA, MD5, Blowfish, AES 等算法
  •     Citext 增加了大小写敏感的文本数据类型,数据使用小写存储
  •     Uuid-ossp 提供了全局唯一标示符的函数
  •     Pg_trgm 增加了基于 trigram 匹配的字符串查找函数

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索postgresql
postgresql扩展模块、postgresql恢复数据库、postgresql查看数据库、postgresql创建数据库、postgresql删除数据库,以便于您获取更多的相关知识。

时间: 2024-10-06 04:35:20

在PostgreSQL上安装并使用扩展模块的教程_数据库其它的相关文章

在Mac OS上安装Vagrant和Docker的教程_Redis

当听到很多人在说Docker是多么多么的棒,很多新潮的孩子都在使用它时,我决定在我的开发环境上也来尝试下.在下面的这篇文章中,我将讲解在Mac OS X怎样建立Postgres,Elasticsearch和Redis. 什么是Docker Docker用轻量容器把一个APP从它运行的OS中隔离开.它把APP放入到一个孤立的盒子中,对外只呈现需要使用的文件夹和端口. 这样,基于建立和使用APP的容器是可重用,共享的.目前,在Docker集中已经存在了15,000种以上的容器.Docker就像一个商

WINDOWS上安装PYTHON2.7 SCRAPY模块教程

由于Scrapy目前对Python2.7的支持最好,Python3下可能会有问题,所以还是在Python2.7下装Scrapy模块. 在Mac上自带的Python2.7环境安装Scrapy模块,一路顺风,直接pip install -i http://pypi.douban.com/simple Scrapy,自动安装所需的模块,一切OK. 但是在Windows环境Python2.7下安装Scrapy,各种问题,问题不断,一个个根据错误提示去网上找解决办法,记录一下一些坑. 首先是pip ins

在树莓派2或树莓派B+上安装Python和OpenCV的教程_python

我的Raspberry Pi 2昨天刚邮到,这家伙看上去很小巧可爱. 这小家伙有4核900MHZ的处理器,1G内存.要知道,Raspberry Pi 2 可比我中学电脑实验室里大多数电脑快多了. 话说,自从Raspberry Pi 2发布以来,我收到了很多请求,要求我能写一个在它上面安装OpenCV和Python的详细说明. 因此如果你想在Raspberry Pi启动运行OpenCV和Python,就往下面看! 在博文的剩余部分,我将提供在Raspberry Pi 2 和Raspberry Pi

Node.js入门教程:在windows和Linux上安装配置Node.js图文教程_node.js

本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v0.10.26 版本为例. Node.js安装包及源码下载地址为:http://www.nodejs.org/download/. 根据不同平台系统选择你需要的Node.js安装包. 注意:Linux上安装Node.js需要安装Python 2.6 或 2.7 ,不建议安装Python 3.0以上版本. Windowv 上安装Node.js Windows 安装包(.msi) : 32 位

Ubuntu 14.x 上安装新字体详细步骤教程

Ubuntu默认自带了很多字体.但有时候你或许对这些字体还不满意.因此,你可以做的是在Ubuntu 14.04. 14.10或者像Linux Mint之类的其它Linux系统中安装额外的字体. 第一步: 获取字体 第一步也是最重要的一步,下载你选择的字体.现在你或许在考虑从哪里下载字体.不要担心,Google搜索可以给你提供几个免费的字体网站.你可以先去看看 Lost Type 的字体.Squirrel同样也是一个下载字体的好地方. 第二步:在Ubuntu中安装新字体 下载的字体文件可能是一个压

PostgreSQL数据库服务端监听设置及客户端连接方法教程_数据库其它

众所周知,PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),是一个可以免费使用的开放源代码数据库系统.本文详细介绍了PostgreSQL数据库服务端监听设置及客户端连接方法,具体如下: 一.背景介绍: 本文所述PostgreSQL服务端运行在RedHat Linux上,IP为:192.168.230.128 客户端安装在Windows XP上, IP为:192.168.230.1 二.配置方法: 1.修改服务端/opt/postgresql/data/postgresq

在Windows下自动备份PostgreSQL的教程_数据库其它

背景在我工作上一个使用PostgreSQL数据库的项目上需要一个自动化系统来每天执行备份.经过一番研究决定通过创建一个Windows批处理文件并添加到Windows计划任务中来实现. 下面是具体步骤: 怎样配置第一步: 下载批处理文件. 第二步: 你可以通过一个简单的命令(schtasks /?查看帮助)或者使用图形界面(开始-控制面板-系统和安全-管理工具-任务计划程序)运行任务计划管理工具,还可以在%SYSTEMROOT%\System32目录下双击Taskschd.msc来启动它.   第

Win7 系统上安装SQL Server 2008图解教程

  这几天因为需要,一直想安装SQL Server 2008来作为Web后台的数据库进行些实验,但总是没有时间,今天终于有时间了,便安装了SQL Server 2008,以下是我的安装的步骤,希望对于有需要的人有所帮助.我一共安装了两次,在第一次安装的时候眼看就要安装完成了,但接下来出现了"试图执行未经授权的操作"的错误,不管选择什么后面都会告诉你安装失败,所以第一次安装完成之后,无法启动SQL Server2008,于是我便卸载了,用360清理了注册表,第一次我安装的时候,我没有选择

在Linux服务器上安装配置socks5代理的教程

  socks5 SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全.SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为.在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器. 如果您的机器具有一个合法的 In