重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PGSQL多行聚合,PGSQL多行合并为一行,PGSQL多行合并
站在用户的角度思考问题,与客户深入沟通,找到全州网站设计与全州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、主机域名、网络空间、企业邮箱。业务覆盖全州地区。
《PostgreSQL 多行变一行》
《PostgreSQL官方文档-聚集函数》
array_agg(distinct(字段名)) 去重后可以获得拼接唯一的字段
PostgreSQL自带有一个简易的全文检索引擎,可以实现小规模数据量的全文检索功能。本文我们将引导介绍一下这个功能,对于小数据量的搜索这个功能是足够使用的,而无需搭建额外的ES等重量级的全文检索服务器。
PG的全文检索操作符是 @@ ,当一个 tsvector (文档)和 tsquery (条件)匹配时返回 true ,并且前后顺序无影响:
和普通的SQL查询一样,只要在 WHERE 条件中使用这个符号就代表使用全文检索条件筛选文档了。如:
@@ 操作符支持隐式转换,对于 text 类型可以无需强类型转换( ::tsvector 或 to_tsvector(config_name, text) ),所以这个操作符实际支持的参数类型是这样的:
tsquery 查询条件并不是简单的正则,而是一组搜索术语,使用并且使用布尔操作符 (AND)、 | (OR)和 ! (NOT)来组合它们,还有短语搜索操作符 - (FOLLOWED BY)。更详细的语法参见 此文档 。
此外,PostgreSQL还提供了两个相对简化的版本 plainto_tsquery 和 phraseto_tsquery 。
plainto_tsquery ( plainto_tsquery([ config regconfig, ] querytext text) returns tsquery )用户将未格式化的 text 经过分词之后,插入 符号转为 tsquery :
phraseto_tsquery ( phraseto_tsquery([ config regconfig, ] querytext text) returns tsquery )行为和 plainto_tsquery 行为类似,但是分词之后不是插入 而是 - (FOLLOWED BY):
使用索引可以加快全文检索的速度。对于全文检索来说,可选的索引类型是 GIN (通用倒排索引)和 GIST (通用搜索树),官方文档更推荐使用 GIN索引 。创建一个 GIN 索引的范例:
也可以是一个连接列:
还可以单独创建一个 tsvector 列,为这个列创建索引:
除了普通的 ORDER BY 条件之外,PostgreSQL为全文检索提供了两个可选的排序函数 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 ,以便实现基于 权重 的排序。
此外,对于PostgreSQL 9.6以上的版本还可以使用 RUM index 排序。(注意,这个是扩展,默认不包含)。
PostgreSQL默认的分词字典中并不包含中文分词字典,因此我们必须手工引入。目前一个比较好的项目是 zhparser ,同时这个插件也是阿里云的RDS默认包含的。安装和启用没什么好说的。值得一提的是分词配置参数。
在 CREATE EXTENSION 之后,必须配置分词参数才能正确进行分词和查找,否则什么都查不到。官方文档提供的一个配置策略是:
n,v,a,i,e,l 这几个字母分别表示一种token策略,只启用了这几种token mapping,其余则被屏蔽。具体支持的参数和含义可以用 \dFp+ zhparser 显示:
WITH simple 表示词典使用的是内置的simple词典,即仅做小写转换。根据需要可以灵活定义词典和token映射,以实现屏蔽词和同义词归并等功能。
比如我们看下面这个例子:
可以看到 江淮 这个词组在查询的时候被忽略了,我们启用 j (abbreviation,简称)再看看结果:
所以实际使用中要设置合理的token types,过少将导致搜索结果不准确,过多将导致性能下降。此外,还有一些诸如 短词复合: zhparser.multi_short = f 这一类的控制分词结果的选项,根据实际使用酌情开启。
一、下载postgreSQL
从官方网站()上,下载所需安装版本,并用默认方式安装。
比如,我下载的是postgresql-9.3.1-1-windows-x64.exe,默认安装目录:C:\Program Files\PostgreSQL。
安装过程中,需要输入数据库超级用户的密码;其余选项,全部默认即可。
二、设置环境变量
set PGHOME=C:\Program Files\PostgreSQL\9.3
set PATH=%PGHOME%\bin;%path%
set PGHOST=localhost
set PGLIB=%PGHOME%\lib
set PGDATA=%PGHOME%\data
三、数据库操作
安装并配置好后,就可以用pgAdmin III进行可视化操作了。
选择“登录角色”,鼠标右键“新建登录角色 ...";
选择“数据库”,鼠标右键“新建数据库...";
选择“模式-数据表”,鼠标右键“新建数据表...";
或者直接执行SQL语句,进行数据表的创建与查询。
1、首先在postgresql数据库中复制表的时候,必须先建立表结构,然后通过insert into语句来实现。
2、如果在复制数据之前没有建立相应的表结构,如下图中的错误信息。
3、在查询数据的时候也可以把两个表联合起来进行查询,通过union关键字来进行查询,如下图。
4、如果在使用union进行查询的进修,两条结果一样人被合并成一条。
5、如果想显示联合查询中相同的语句,可以使用union all来进行查询。
一、去官方网站下载PostgreSQL当前最新版(当前最新版本为9.3.2)
如上图,下载红框内的Source文件。
二、除此之外还需准备Perl(当前最新为5.18.1.1800)及Flex、Bison安装包
之所以用Perl是因为我们后面安装PG主要采用的就是Perl来安装,而Flex、Bison则是PG中对命令或查询语句进行词法、语法解析所用到的,Perl的安装教程请戳这里^_^(安装到C盘也不要紧,我们可以添加系统环境变量解决),Flex、Bison下载后不用安装,至于有童鞋想知道为什么PG需要这两个东西请戳这里^_^。我们现在有Flex、Bison的包,有PG的Source Code及Perl的安装包(要安装),如下图所示:
准备好的程序
Flex_Bison文件夹中的程序
将PG及flex_bison放置于同一文件夹下即可。
三、开始安装PostgreSQL
首先要修改一个小地方,打开PG文件夹,找到MKVcbuild.pm文件(如下图所示),用文本编辑器打开(如Notepad++),修改其中my $vsVersion = DetermineVisualStudioVersion()该行,变为
my $vsVersion = “9.0.0”,至于为什么这么改,是因为不这么改,我的VS2008就无法打开,并且项目也无法编译成功,这个地方我不敢保证是不是特例还是共性,有待验证。具体如下图所示:
接下来如果Perl是安装到了C盘,则在系统环境变量中添加Perl的C盘路径位置,比如:
打开你的命令编辑器,因为我的电脑是64位的,这里我打开的是VS自带的64位命令编辑器,CMD也OK。
到MSVC目录下,输入perl build.pl DEBUID
这样就开始编译了,全过程大概需要5分钟吧,期间可能会有若干warning,但是无所谓啦,只有没有error就行,(我自己安装了两遍,有些许warning,但是绝对没有error出现)
编译结束后,就可以打开你的工程了,如下图所示
接着在命令编辑器中继续输入perl install.pl (此处为bin文件夹路径,自己指定),例如:
perl install.pl C:/bin,这样就可以将相关执行文件拷贝到你的bin目录下,将来执行的时候就可以在bin目录下执行了
执行完后,恭喜,PG就安装完成了,下面你可以简单的登陆你的PG来进行调试了
四、简单的调试
首先初始化系统数据目录(包括系统表等元数据)输入initdb.exe DB(数据目录名字,可自己指定)
其次启动服务器,输入postgreys.exe -D DB (注意-D中的D一定要大写)
再次,启动客户端(另打开一个窗口),输入psql.exe DB
最后,自己可以create
database,create table,往table中insert
into些数据,最后可以select数据等等,就可以自由操纵了,比如下例中,执行一个Select语句,通过VS2008附加到进程中去跟代码,具体研究PG的细节实现。
五、结尾