PostgreSQL之体系结构
文章平均质量分 66
涉及PostgreSQL数据库逻辑结构中模式、表、触发器等的方方面面。
瀚高PG实验室
瀚高PG实验室(Highgo PG Lab)依托于瀚高DBA运维团队及瀚高数据库PG内核研发团队,旨在深入研究PostgreSQL技术、使用技巧、内核探秘、PG教学等,并进行分享。欢迎大家关注、交流。
展开
-
dynamic hash
了解动态hash,作为快速查找的工具,在pg内部应用场景很多,比如共享内存,表查询,最新代码分支GUC options也都用到了这一结构,记一下hash创建、查找的过程。原创 2023-07-26 17:51:11 · 235 阅读 · 0 评论 -
虚拟文件描述符VFD
了解VFD原创 2023-07-24 15:14:20 · 248 阅读 · 0 评论 -
深入了解zhparser
Zhparser是一个PostgreSQL扩展,用于中文全文搜索。它实现了一个基于简单中文分词(SCWS)的中文解析器。SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)。这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。词是 中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开,所以如何准确并快速分词一直是中文分词的攻关难点。原创 2023-05-15 13:44:06 · 949 阅读 · 0 评论 -
pg如何进行小版本升级
本文以pg14.2升级至pg14.6为例,向各位读者介绍pg小版本升级的方法及步骤。原创 2023-01-10 11:07:10 · 1168 阅读 · 0 评论 -
pg12新特性-新增 pg_promote() 函数用于激活备库
pg12新特性,新增 pg_promote() 函数用于激活备库原创 2022-06-13 17:20:16 · 597 阅读 · 1 评论 -
pg12中pg_dump/pg_dumpall新增选项介绍
本文主要用于介绍与pg10.5相比,pg_dump/pg_dumpall命令的新增选项介绍。原创 2022-06-02 15:31:53 · 573 阅读 · 0 评论 -
瀚高数据库优化解决方案
本文转自微信公众号“瀚高数据库售前团队”文章https://mp.weixin.qq.com/s/iYwAAc6HWPt2bJbCIbKKfg声明:本文章内容仅用于学习、交流,未经瀚高数据库售前团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的,利用此文所提供的信息而造成的任何直接或间接的损失,均由使用者本人负责。前言一个信息系统从前期的规划,到具体的建设,再到最终建成,往往耗时数月甚至数年时间。信息系统建成后,伴随着业务的发展会面临着系统的不断迭代,如旧业务的升级、新需求的加转载 2022-05-31 14:40:51 · 805 阅读 · 0 评论 -
rhel 7&&Postgresql 如何开启大页Huge Pages
对于Postgres,开启Huge Pages的好处,这里不详细阐述了。以下是官方文档里,开启huge page 的方法:https://www.postgresql.org/docs/9.6/static/kernel-resources.html$ head -1 $PGDATA/postmaster.pid //确定下postmaster的id4170$ grep ^V原创 2018-01-08 16:34:27 · 1330 阅读 · 0 评论 -
xmin、xmax、cmin、cmax
这四个字段在多版本实现中用于控制数据行是否对用户可见。PostgreSQL会将修改前后的数据都存储在相同的结构中,分为以下几种情况。新插入一行时,将新插入行的xmin填写为当前的事务ID,xmax填0。修改某行时,实际上操作是插入一行,旧行上的xmin不变,旧行上的xmax改为当前的事务ID,新行上的xmin填为当前事务ID,新行上的xmax填为0。删除一行时,把被删除行上的xmax填原创 2018-01-24 22:47:04 · 3479 阅读 · 1 评论 -
Postgres的吞吐过程(Throughput approach)
接下来的文章里会有详细解释说明。原创 2018-01-08 18:31:18 · 336 阅读 · 0 评论 -
fsync和 full_page_writes
先看一下PG官网关于这两个参数的介绍: fsync (boolean) If this parameter is on, the PostgreSQL server will try to make sure that updates are physically written to disk, by issuing fsync() system calls or various eq原创 2018-02-01 14:51:47 · 1099 阅读 · 0 评论 -
postgresql 关于GBK和utf-8字符集问题
postgresql中没有GBK字符集。oracle有。字符集之间的转换可以通过如下方式实现:convert(要转换的字符串, 目标字符集, 源字符集)例如:highgo=# select convert('abcdefg', 'UTF8', 'GBK');By 徐云鹤原创 2018-01-09 22:21:34 · 16152 阅读 · 0 评论 -
PostgreSQL10之pg_partitioned_table视图
PostgreSQL10 新增pg_partitioned_table动态视图。该视图可以直观查看存储的分区表信息。NameTypeReferencesDescriptionpartrelidoidpg_class.oidThe OID of thepg_classentry for this part原创 2018-01-09 22:58:40 · 2483 阅读 · 0 评论 -
PostgreSQL中的log, xlog和clog
pg_log$PGDATA/pg_log是数据库运行活动日志的默认保存目录,它包括错误信息,查询日志以及启动/关闭数据库的信息。当PostgreSQL启动失败时,这里应该是你第一个应该查看的信息。一些Linux发行版以及其他的软件包管理系统会将这个日志目录移到某些地方,比如:/var/log/postgresql你可以在pg_log目录里自由地删除、重命名、压缩或者移动文件而不会有原创 2018-02-02 22:37:12 · 4349 阅读 · 1 评论 -
pg_stat_activity视图
The pg_stat_activity view will have one row per server process, showing information related to the current activity of that process.highgo=# \d pg_stat_activity (9.5.7)datid原创 2018-01-22 11:18:44 · 2710 阅读 · 0 评论 -
recovery_min_apply_delay
默认情况下,备用服务器将尽快从主服务器恢复WAL记录。有时间延迟的数据副本可能是有用的,为纠正数据丢失错误提供了机会。此参数允许您将恢复延迟一段固定的时间,如果未指定单位,则以毫秒为单位进行测量。例如,如果将此参数设置为5分钟,则只有在备用系统时间至少比主服务器报告的提交时间多五分钟时,备用服务器才会重播每个事务提交。服务器之间的复制延迟可能超过此参数的值,在这种情况下不会添加任何延迟。请注意原创 2018-01-22 11:16:45 · 782 阅读 · 0 评论 -
\o和\! 命令了解
\! [ command ] 跳到一个单独的shell或者执行shell命令command。参数不会被进一步解释,shell将会 原封不动地看到参数。特别要说明的是,变量替换规则和反斜线转义在这里不适用。\o 或 \out [ filename ] \o 或 \out [ | command ] 安排把未来的查询结果保存到文件filename 中或者用管道导向到shell命令command。 如果原创 2017-12-28 15:34:43 · 6304 阅读 · 0 评论 -
default_statistics_target参数
default_statistics_targetdefault_statistics_target为没有通过ALTER TABLE SET STATISTICS设置的列特定目标设置表列的默认统计目标。 较大的值会增加执行ANALYZE所需的时间,但可能会提高规划人员估算的质量。该参数告诉 PostgreSQL 应该抽样多少数据来填充存储元数据的表。默认值为100,PostgreSQL 会读取 d原创 2017-12-28 15:30:45 · 1425 阅读 · 0 评论 -
archive_mode参数
archive_mode 当启用archive_mode时,通过设置archive_command将已完成的WAL段发送到归档存储。除了off,disable,还有两种模式:on,always。在正常操作期间,两种模式之间没有区别,但是当设置为always的情况下,WAL archiver在存档恢复或待机模式下也被启用。在always模式下,从归档还原或流式复制流的所有文件都将被归档(再次...原创 2018-02-08 16:15:40 · 4975 阅读 · 0 评论 -
postgresql的oid
行对象标识符(对象ID),这个字段只有在创建表时使用了“withoids”或配置参数“default_with_oids”的值为真时才出现,这个字段的类型是oid(类型名与字段名同名)PostgreSQL在内部使用对象标识符(oid)作为系统表的主键。系统不会给用户创建的表增加一个oid字段。oid类型用一个四字节的无符号整数实现,不能提供大数据范围内的唯一性保证,甚至在单个大表中也不行。因原创 2018-01-03 22:51:02 · 9272 阅读 · 0 评论 -
postgresql的ctid
ctid表示数据行在它所处的表内的物理位置,ctid字段的类型是tid。尽管ctid可以快速定位数据行,每次vacuum full之后,数据行在块内的物理位置就会移动,即ctid会发生变化,所以ctid不能作为长期的行标识符,应该使用主键来标识一个逻辑行。查看ctid,示例如下:mydb=# selectctid,idfrom t1 ;ctid|id-------+--原创 2018-01-03 22:50:37 · 8840 阅读 · 0 评论 -
checkpoint_completion_target值的设置(二)
高checkpoint_completion_target值带来的优缺点 优点: • I/O操作占用资源比例逐渐趋于平缓。避免或减少了数据库运行中突然卡住不动的情况。 • 磁盘吞吐量趋于平缓,减少和减小了I/O峰值的出现。 • 等待时间减小,提高客户体验 缺点: • 如果宕机,则恢复时间长 • Shared_buffer比较大,写入频繁的数据库,这个值设置的过大是个原创 2017-12-27 15:07:55 · 672 阅读 · 0 评论 -
checkpoint_completion_target值的设置(一)
checkpoint_completion_target是postgresql数据库中一个至关重要的参数,主要与参数checkpoint_timeout(checkpoint_timeout默认值为5min)配合使用。举个简单的例子来说:情况一:•checkpoint_completion_target=0.5•checkpoint_timeout原创 2017-12-27 14:50:49 · 2941 阅读 · 1 评论 -
pg_settings 视图
我们知道postgresql参数配置是在$PGDATA下的postgresql.conf文件中,当然有时候也会在postgresql.auto.conf文件中,后者优先级更高。 除此以外,在数据库中可以通过视图pg_settings查看。mydb=# \xExpanded display is on.mydb=# select * from pg_settings ;-[ RECORD 1原创 2018-01-11 14:08:45 · 1788 阅读 · 1 评论 -
关于postgresql和oracle对于换行处理的不同之处
对于换行操作,postgresql和oracle在处理方式上是有区别的。在postgresql查询:highgo=# select 'a''a'; ?column?---------- a'a(1 row)highgo=# select 'a' 'a';错误: 语法错误 在 "'a'" 或附近的LINE 1: select 'a' 'a';原创 2018-02-23 09:43:54 · 602 阅读 · 0 评论 -
max_standby_streaming_delay
max_standby_archive_delay (integer) When Hot Standby is active, this parameter determines how long the standby server should wait before canceling standby queries that conflict with about-to原创 2018-03-16 14:52:55 · 1943 阅读 · 0 评论 -
Pg extention pg_buffercache
目录文档用途详细信息文档用途了解pg_buffercache扩展详细信息1.介绍PostgreSQL额外支持模块之pg_buffercache pg_buffercache模块是pg内核原生支持的模块。完全编译后,其会存在于扩展目录中。pg_buffercache提供了一种实时检测共享缓冲区的方法。 这个模块提供了一个C函数:pg_buffercache_pages,它...原创 2020-05-08 09:21:48 · 417 阅读 · 0 评论 -
max_standby_streaming_delay(三)
highgo=# show max_standby_streaming_delay ; max_standby_streaming_delay----------------------------- 30s(1 row)highgo=# alter system set max_standby_streaming_delay TO -1;ALTER SYSTEMhighgo=# \q原创 2018-03-16 14:56:21 · 1060 阅读 · 0 评论 -
pg_buffercache
查看缓冲区缓存的内容: create extension pg_buffercache; select c.relname, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d o原创 2018-01-02 09:44:02 · 393 阅读 · 0 评论 -
pg_is_xlog_replay_paused()
pg_is_xlog_replay_paused() bool True if recovery is paused. pg_xlog_replay_pause() void Pauses recovery immediately (restricted to superusers by default, ...原创 2018-03-16 14:57:32 · 605 阅读 · 0 评论 -
max_standby_streaming_delay(二)
前面博客提到了max_standby_archive_delay (integer)和max_standby_streaming_delay (integer) 两个参数。 对这两个参数有所了解以后,我们再考虑一下,即使再增大这两个参数,总有上限,而且增大这两个参数会导致主备数据库之间数据存在较多不一致。那么除了增大这两个参数的值外,还有什么解决办法?答案是:hot_standby_feedbac原创 2018-03-16 14:54:33 · 1651 阅读 · 0 评论 -
关于postgreSQL的search_path参数功能及效果
如下是对search_path的一些测试:查询当前search_path:highgo=# show search_path; search_path ----------------"$user",public(1 row)创建一张表:highgo=# create table one (int int);CREATE TABLE查询该表所属模式:highgo=# \dt L...原创 2017-11-02 00:15:40 · 7901 阅读 · 0 评论 -
PostgreSQL禁用全表扫描
PostgreSQL可以通过一些设置来禁用全表扫描(FULL SCAN/Seq Scan)注意:设置此功能后不是完全避免全表扫描,而是只要有不通过全表扫描能得出结果的就不走全表扫描。如果什么路都不通,那肯定得全表扫描,不然怎么获取数据。而且并不是不走全表扫描性能就一定好。下面展示下这个功能:查询表结构:highgo=# \d test Table test C...原创 2018-03-02 18:01:28 · 4466 阅读 · 6 评论 -
Postgres 之 TOAST技术
TOAST简介首先,Toast是一个名字缩写,全写是The OverSized Attribute Storage Technique(超尺寸字段存储技术)顾名思义,是说超长字段在Postgres的一个存储方式;Postgres采用的存储默认是每个页面存储固定8Kb大小的数据,并且元组不允许跨页面存储,所以并不能直接存储大字段数据;Toast就是为此应运而生,它会将大字段值压缩或者分散为多个物理行...原创 2018-03-17 19:09:15 · 2896 阅读 · 0 评论 -
PostgreSQL10之pg_hba_file_rules视图
PostgreSQL10 新增 pg_hba_file_rules动态视图。该视图的功能直观体现出pg_hba.conf文件的配置信息和配置是否正确。修改hba文件reload后,该视图可以实时反馈出生效的配置信息和错误的配置信息。很实用。避免了一些情况下配置错误没有发现还找不到原因的情况。一种错误情况的示例如下: line_number | type | databas原创 2017-12-26 00:59:26 · 720 阅读 · 0 评论 -
pg_class(一)
目录 pg_class 记录表和几乎所有具有列或者像表的东西。这包括索引(但还要参见 pg_index )、序列、视图、物化视图、组合类型和TOAST表,参见 relkind 。下面,当我们提及所有这些类型的对象时我们使用“关系”。并非所有列对于所有关系类型都有意义。pg_class 中的一些逻辑标志被以一种懒惰的方式维护:在正确状态时它们被保证为真,但是当条件不再为真时它们并不...原创 2018-03-06 10:58:13 · 12152 阅读 · 0 评论 -
pg_collation
目录 pg_collation 描述了可用的排序规则,其本质是从一个SQL名字到操作系统locale分类的映射。 注意在这个目录中的唯一键是( collname 、 collencoding 、 collnamespace ), 不仅仅是( collname ,collnamespace )。 所有 collencoding 不等于当前数据库编码或-1的编码规则通常都会被P...原创 2018-03-06 13:55:03 · 914 阅读 · 0 评论 -
PostgreSQL中的统计信息、选择度和基数
SQL是一种声明性语言,用户请求他们需要的东西而不需要明确告知计算机应该用什么方式得到相应的结果。这些工作是由DBMS(数据库管理系统)来完成的。DBMS将DML声明转化成为操纵所需记录集合的程序,它要确保返回正确的结果以及在理想情况下,速度越快越好。这里的速度越快越好意味着:1、将磁盘访问降到最低。2、给与顺序读一个优先级(对于机械硬盘尤其重要)。3、降低CPU操作数。4、降低内存占用。为了实现...原创 2018-03-19 17:40:08 · 2329 阅读 · 0 评论 -
pg_reload 如何使用以及注意事项。
不同操作系统平台,pg_reload的用法:UBUNTU/DEBIAN pg_ctlcluster 9.0 main reloadRED HAT/FEDORA service postgresql reloadpg_ctl -D /var/lib/pgsql/data reloadSOLARIS pg_ctl -D /var/lib/pgsql/data reloadMAC OS pg_ct原创 2017-11-27 11:52:33 · 8835 阅读 · 0 评论 -
postgresql的now()与Oracle的sysdate
postgresql的now()为当前事务开始时间,而Oracle的sysdate是当前时间。区别在于事务。postgresql中的now():postgres=# begin ;BEGINpostgres=# select now(); now ------------------------------- 2017-03-原创 2017-12-06 09:51:05 · 5067 阅读 · 0 评论