推广 热搜: 让人  面板  父母  红糖  爸爸  站在  牛奶  雷电  酸奶  也就 

包含postgresql的词条

   日期:2023-04-16     浏览:26    评论:0    
核心提示:PostgreSQL全文检索简介PostgreSQL自带有一个简易的全文检索引擎,可以实现小规模数据量的全文检索功能。本文我们将引导介绍一下这个功能,对于小数据量的搜索这个功能是足够使用的,而无需搭建

PostgreSQL全文检索简介

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 (a***reviation,简称)再看看结果:

所以实际使用中要设置合理的token types,过少将导致搜索结果不准确,过多将导致性能下降。此外,还有一些诸如 短词复合: zhparser.multi_short = f 这一类的控制分词结果的选项,根据实际使用酌情开启。

postgresql----数组类型和函数

postgresql支持数组类型,可以是基本类型,也可以是用户自定义的类型。日常中使用数组类型的机会不多,但还是可以了解一下。不像C或JAVA高级语言的数组下标从0开始,postgresql数组下标从1开始,既可以指定长度,也可以不指定长度。且postgresql既支持一维数组,也支持多维数组,但是平时二维数组也就够用了。

示例1.使用ARRAY构建数组类型

---1*4的一维数组test=#selectarr***[1,2,3,4];

  arr***  -----------{1,2,3,4}

(1 row)--2*2的二维数组test=#selectarr***[[1,2],[3,4]];

    arr***    ---------------{{1,2},{3,4}}

(1 row)--1*2的二维数组,基本类型为box矩形类型,且和上面相比box类型元素之间是以分号分隔的,其他所有类型的数据都是以逗号分隔的test=#selectarr***[box'(1,1),(0,0)',box'(0,0),(-1,-1)'];

            arr***            -----------------------------{(1,1),(0,0);(0,0),(-1,-1)}

(1row)

示例2.创建一张表,字段包含数组类型

其中int[]表示数组长度无限制,int[4]表示数组长度为4.

test=#createtabletbl_arr***(aint[],bvarchar(32)[][],cint);CREATETABLEtest=#insertintotbl_arr*** (a,b,c)values(arr***[1,2],arr***[[1,2,3],[4,5,6]],1);INSERT01test=#insertintotbl_arr*** (a,b,c)values(arr***[1,2,3],arr***[[1,2],[4,5]],2);INSERT01test=#select*from tbl_arr*** ;

    a    |b| c ---------+-------------------+---{1,2}|{{1,2,3},{4,5,6}}|1 {1,2,3}|{{1,2},{4,5}}|2(2 rows)

test=#selecta[1],b[2]fromtbl_arr***wherec=1;

a | b ---+---1|

(1 row)

test=#selecta[1],b[2][1]fromtbl_arr***wherec=1;

a | b ---+---1|4(1 row)

test=#selecta[1],b[2][4]fromtbl_arr***wherec=1;

a | b ---+---1|

(1row)

test=#updatetbl_arr***seta[1]=200wherea[1]=1;UPDATE1test=#selecta[1],b[2][4]from tbl_arr*** ;

  a  | b -----+---100|200|

(2rows)

也可以使用[下标:上标]方式来查询数组连续的某些元素。

test=#selecta[2:3]from tbl_arr*** ;

  a  -------{2}

{2,3}

(2 rows)

test=#selecta[1:3]from tbl_arr*** ;

    a    -----------{100,2}

{200,2,3}

(2rows)

数组操作符与函数

操作符

操作符描述示例结果

=相等 SELECt ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]; t

不等于 select ARRAY[1,2,3] ARRAY[1,2,4]; t

小于 select ARRAY[1,2,3] ARRAY[1,2,4]; t

大于 select ARRAY[1,4,3] ARRAY[1,2,4]; t

=小于或等于 select ARRAY[1,2,3] = ARRAY[1,2,3]; t

=大于或等于 select ARRAY[1,4,3] = ARRAY[1,4,3]; t

@包含 select ARRAY[1,4,3] @ ARRAY[3,1]; t

@包含于 select ARRAY[2,7] @ ARRAY[1,7,4,2,6]; t

重叠(是否有相同元素) select ARRAY[1,4,3] ARRAY[2,1]; t

||数组与数组连接 select ARRAY[1,2,3] || ARRAY[4,5,6]; {1,2,3,4,5,6}

||数组与数组连接 select ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]; {{1,2,3},{4,5,6},{7,8,9}}

||元素与数组连接 select 3 || ARRAY[4,5,6]; {3,4,5,6}

||数组与元素连接 select ARRAY[4,5,6] || 7; {4,5,6,7}

函数

函数返回类型描述示例结果

arr***_append(anyarr***,anyelement)anyarr*** 在数组末尾追加元素 

SELECT arr***_append(ARRAY[1,2], 3);

 {1,2,3}

arr***_cat(anyarr***,anyarr***)anyarr*** 连接两个数组 SELECT arr***_cat(ARRAY[1,2,3], ARRAY[4,5]); {1,2,3,4,5}

arr***_ndims(anyarr***)int 返回数组维数 SELECT arr***_ndims(ARRAY[[1,2,3], [4,5,6]]); 2

arr***_dims(anyarr***)text 返回数组维数的文本表示 SELECT arr***_dims(ARRAY[[1,2,3], [4,5,6]]); [1:2][1:3]

arr***_fill(anyelement,int[], [,int[]])anyarr***使用提供的值和维度初始化一个数组,其中anyelement是值,***个int[]是数组的长度,第二个int[]是数组下界,下界默认是1 SELECT arr***_fill(7, ARRAY[3], ARRAY[2]); [2:4]={7,7,7}

arr***_length(anyarr***,int)int 返回数组指定维度的长度 SELECT arr***_length(arr***[1,2,3], 1); 3

arr***_lower(anyarr***,int)int 返回数组指定维度的下界 SELECT arr***_lower('[0:2]={1,2,3}'::int[], 1); 0

arr***_position(anyarr***,anyelement[,int])int 返回数组元素anyelement从数组的[,int]位置(默认为1)开始***次出现在数组中的位置,数组必须是一维的 SELECT arr***_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon'); 2

arr***_positions(anyarr***,anyelement)int[] 返回元素在数组中的所有位置 SELECT arr***_positions(ARRAY['A','A','B','A'], 'A'); {1,2,4}

arr***_prepend(anyelement,anyarr***)anyarr*** 在数组开头添加新的元素 SELECT arr***_prepend(1, ARRAY[2,3]); {1,2,3}

arr***_remove(anyarr***,anyelement)anyarr*** 从数组中删除所有的指定元素,必须是一维数组 SELECT arr***_remove(ARRAY[1,2,3,2], 2); {1,3}

arr***_replace(anyarr***,anyelement,anyelement)anyarr*** 替换指定数组元素为新的元素 SELECT arr***_replace(ARRAY[1,2,5,4], 5, 3); {1,2,3,4}

arr***_to_string(anyarr***,text[,text])text 将数组元素使用分隔符连接为文本,NULL可以使用指定元素替换 SELECT arr***_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*'); 1,2,3,*,5

arr***_upper(anyarr***,int)int 数组指定维度的上届 SELECT arr***_upper(ARRAY[1,8,3,7], 1); 4

cardinality(anyarr***)int 返回数组所有维度的长度总和,如果是空数组则返回0 SELECT cardinality(ARRAY[[1,2],[3,4]]); 4

string_to_arr***(text,text[,text])text[] 将文本使用分隔符分隔后转换为数组,如果指定第三个参数,则第三个参数在数组中被转换为NULL SELECT string_to_arr***('xx~^~yy~^~zz', '~^~', 'yy'); {xx,NULL,zz}

unnest(anyarr***)setof anyelement 将数组元素转换为行 SELECT unnest(ARRAY[1,2]); 

1

2

unnest(anyarr***,anyarr***[, ...])setof anyelement, anyelement [, ...] 将多维数组转换为行集合,其中***个数组显示为***列,第二个数组显示为第二列,以此类推。但是这个函数只在from子句中使用 SELECt * from unnest(ARRAY[1,2],ARRAY['foo','bar','baz']); 

unnest | unnest

--------+----

1 | foo

2 | bar

  | baz

postgresql是什么数据库?请详解一下,谢谢

分类: 电脑/网络 程序设计 其他编程语言

解析:

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目, 并且有非常广泛的用户。

PostgreSQL 可以说是最富特色的自由数据库管理系统,甚至我们也可以说是最强大的自由软件数据库管理系统。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 Interbase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。

如何在Postgresql中创建序列数并应用在数据表

序列数可以增加postgresql数据表的检索速度,同时降低数据查询时的资源消耗。那么如何在postgresql中创建序列数并且应用呢?下面我给大家分享一下。

工具/材料

pgAdmin4

创建序列数

01

首先打开pgAdmin4,展开postgresql数据库,找到模式下面的public选项,如下图所示

02

接下来在public下面右键单击序列,然后点击Create下面的sequence选项,如下图所示

03

在弹出的创建Sequence界面中首先给序列数起一个名字,如下图所示,注意都用英文

04

然后切换到Definition页卡,定义一下序列的增加量,如下图所示,其中maximum根据自己的需要进行设置

05

最后回到数据库主界面,你会看到序列下面多出了一个项,这就是我们创建的序列数了,如下图所示

在数据表中应用序列数

01

首先选中一个数据表,点击右侧的编辑按钮,如下图所示

02

在弹出的编辑界面中切换到Columns页卡,点击ID签名的编辑按钮,如下图所示

03

最后在字段的编辑界面中切换到Variables选项卡,然后在Value列中通过nextval函数带入刚才定义的序列数即可,如下图所示

PostgreSQL***的优势是什么?

PostgreSQL***的优势主要是两个方面:

1)PostgreSQL的开源开放性:因为我们是开源的,变拥有了动态的社区、增长非常快的社区,新功能总是不断出现。不仅可靠性很高,性能也很高。

2)PostgreSQL的可扩展性:在1986年的时候,它便已经被设计为可扩展的。可以向数据库添加语言 可以添加数据类型 可以添加索引方法、操作符 、类型转换、聚合;支持GIS、Json、全文搜索、范围类型、XML。

Postgres的独特之处在于它同时执行关系和非关系操作。现在我们从很多不同的地方获取数据,关系系统必须具有灵活性,必须能够处理复杂的数据,而Postgres是唯一真正能够做到这一点的数据库。

postgresql是什么数据库

postgresql是功能强大的开源数据库。

postgresql数据库是功能强大的开源数据库,它支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。

PostgreSQL数据库提供了丰富的接口,可以很方便地扩展它的功能,如可以在GiST框架下实现自己的索引类型,支持使用C语言写自定义函数、触发器,也支持使用流行的编程语言写自定义函数。

PostgreSQL数据库优点

1、对超许可数量软件使用的天然免疫力

对一些商业性质的数据库销售商来说,超许可数量的软件使用是***位的问题。而使用PostgreSQL,因为没有任何授权的费用是,也就没有任何人可以起诉您违反授权协议违规使用软件。

2、比商业服务商更好的支持

除了有一般商业公司的支持外,我们还有由PostgreSQL专业人员和热心的爱好者组成的各种社区,用户可以向他们寻求支持和帮助。

3、员工成本的显著降低

相对于市场上大型的商业私有数据库软件,我们的系统在设计和开发时已考虑仅需少量的维护和优化,同时仍保持所有功能正常、稳定和性能正常。不仅如此,我们的培训过程相对于那些商业私有数据库供应商来说,总体来说有更好的性价比、更容易管理和更接近真实的使用场景。

4、享有盛名的可靠性和稳定性

与很多商业私有数据库不一样的是,对很多公司特别常见的是,PostgreSQL在几年的运行过程中几乎未出现哪怕是一次的宕机情况,即使是一次,它就是这样稳定地工作着。

5、扩展性

所有PostgreSQL的源代码对所有人都是可以免费获得的。如果您的公司员工需要定制或是给PostgreSQL增加一些功能,他们只需做很少的改动工作,也没有额外的成本。全球PostgreSQL社区的专业人员和热心的爱好者也在积极地扩展PostgreSQL的功能。

关于postgresql和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

原文链接:http://www.lingmov.com/news/show-12004.html,转载和复制请保留此链接。
以上就是关于包含postgresql的词条全部的内容,关注我们,带您了解更多相关内容。
 
标签: 数组 类型 数据库
打赏
 
更多>同类资讯
0相关评论

推荐资讯
网站首页  |  VIP套餐介绍  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  手机版  |  SITEMAPS  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报