资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

关于postgresql文档的信息

【转】PostgreSQL多行变一行

PGSQL多行聚合,PGSQL多行合并为一行,PGSQL多行合并

成都创新互联公司专业为企业提供西盟网站建设、西盟做网站、西盟网站设计、西盟网站制作等企业网站建设、网页设计与制作、西盟企业网站模板建站服务,十余年西盟做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

《PostgreSQL 多行变一行》

《PostgreSQL官方文档-聚集函数》

array_agg(distinct(字段名)) 去重后可以获得拼接唯一的字段

技术文档 - PostgreSQL 性能优化之 fsync 参数

目 录

总 结

PostgreSQL 通过调用系统 fsync() 或者其他使得事务内容写入到物理磁盘,这样可以保证操作系统或者数据库出现宕机后,仍然可以恢复到某一个一致性的状态。理论上讲 PostgreSQL 的 fsync 功能关闭,可以实现性能的提升,但是带来的影响就是需要承担数据的丢失,因为出现系统宕机或者数据库崩溃的时候有一些数据是没有落盘的。

本文将验证 fsync 参数的性能影响,以及参数关闭时数据库宕机后的影响。

数据量:1000W

fsync 参数:on

初始化表:user_info

pgbench 压测

pgbench 结果

pgbench 压测

pgbench 结果

数据量:1000W

fsync 参数:off

初始化表:user_info

pgbench 压测

pgbench 结果

pgbench 压测

pgbench 结果

通过对比发现,将 fsync 改为 off,对于读 TPS,参数 fsync 的影响不大,对于写 TPS,性能有一定提升。

现在验证参数关闭时数据库宕机后的影响

首先,使用将数据库性能跑起来

然后,模拟服务器断电

之后,启动数据库

提示信息:比致命错误还过分的错误。

结果:数据库无法启动,原因就是因为无法找到一个有效的 checkpoint 记录,这就是因为 fsync 设置为 off,由于数据库异常宕机导致。可以通过使用 pg_resetxlog 恢复数据库,但是会造成部分数据无法找回,数据丢失;也可以通过备份恢复,同样也会丢失部分数据。

fsync 参数对于读 TPS 的性能影响不大,对于写 TPS 的性能有一些影响,设置为 off,写 TPS 性能有一定提升,但是存在数据库宕机后无法正常启动,即使恢复后启动数据库,也会有数据丢失的很大风险。因此生产环境非必要时,不要将此参数设置为 off,还是使用默认的 on 比较稳妥。

PostgreSQL如何导入数据

用我写的软件可以用excel导入到postgresql,你上网找fitreport就行了。

或者这样做:

可以写语句或采用以下的方法

网上转录下来的方法:

步骤:

1.将excel表格字段,按照postgresql

数据库中表的字段顺序来整理数据,并保存为csv文件。

2.用记事本打开csv文件,另存为utf-8格式。

3.使用pgadmin客户端链接postgresql数据库,执行如下脚本,导入csv文件到postgresql数据表:

copy

testdata

from

'd:/test/testdata.csv'

delimiter

as','

csv

quote

as

'"'

注:testdata

是postgresql数据库表的名称。

注意事项:

1.test目录需要赋予postgres

用户可读写的权限,否则会有如下报错信息:

error:

could

not

open

file

"d:/testdata2.csv"

forwriting:

permission

denied

2.csv文件要为utf-8格式,否则导入时可能会有报错:

error:

invalid

bytesequence

for

encoding

"utf8":

0xcdf5

3.注意windows环境下文件路径的表述方式,如:d:/test/data.csv

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

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


当前标题:关于postgresql文档的信息
新闻来源:http://cdkjz.cn/article/dsdgcpe.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220