首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
PostgreSQL
Foucus
创建于2022-03-23
订阅专栏
PostgreSQL技术学习研究
等 6 人订阅
共142篇文章
创建于2022-03-23
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
PostgreSQL Shared Buffers详解
shared buffers即数据库服务器的共享内存缓冲区,这个参数一般建议设置成操作系统内存的25%,为什么设置这么大呢?设置的越大是不是越好呢?要解决这些问题,我们需要了解在Postgresql中shared buffers究竟是如何工作的。再介绍shared buffers...
PostgreSQL检查点(checkpoint)详解
checkpoint简单点说就是一个数据库事件,用来保证数据一致性和完整性。 当我们在数据库中执行checkpoint时,就会将其之前的脏数据刷到磁盘,从而实现数据缩短数据库崩溃恢复时间的目的。例如当我们更新任何数据的时候,对应于包含该数据的块将在shared buffers中更...
PostgreSQL时间线(timeline)和History File
在pg中,当我们进行了基于时间点的还原(PITR)后,数据库会启用新的时间线并继续进行操作。 但是,当我们进行基于时间点的还原后如果发现又出现错误,想要继续还原数据库该如何操作呢?如何还原到原先旧的时间线呢? 我们可以使用recovery_target_timeline参数来指定...
PostgreSQL autovacuum原理详解
PostgreSQL的Vacuum可以帮助清除表中的死元组并释放空间,但是表上什么时候需要行vacuum操作呢? 一般来说不需要我们去手动进行vacuum操作,autovacuum进程会自动去对需要的表进行vacuum操作。 autovacuum进程会自动执行VACUUM和ANA...
PostgreSQL批量update与oracle差异
当我们在数据库中有这样的需求时: 需要以某列的当前值为判断对象,将其更新成其它值。......看上去很简单,但是上面的更新却存在一个很大的问题,当我们第一次执行完update后,表中id=2其实有两行数据,再去进行第二条语句时,两条语句将都会被更新。显然这些并非我们的意愿,我们仅...
PostgreSQL表连接详解(inner join、outer join、子查询)
在介绍pg中表连接之前,我们先来看一下子查询。在某些方面,子查询和表连接类似,都是多个表协作一起进行使用。LINE 1: select (select * from (values (1,2),(2,3)) as t(c1,c2)) , re...当然,子查询的使用也是十分灵活。...
PostgreSQL批量修改列名大小写
在PostgreSQL中默认是大小写敏感的,并默认会将SQL语句转化为小写。不过还好我们可以通过information_schema.columns视图去查询哪些列是大写的,来实现批量修改的功能。select * from information_schema.informati...
PostgreSQL利用递归优化求稀疏列唯一值
在数据库中经常会碰到一些表的列是稀疏列,只有很少的值,例如性别字段,一般就只有2种不同的值。 但是当我们求这些稀疏列的唯一值时,如果表的数据量很大,速度还是会很慢。查询: 可以看到下面的查询速度很慢。Time: 8803.505 ms (00:08.Time: 1026.464 ...
PostgreSQL空间回收利器——pg_repack
PostgreSQL的表或索引发生膨胀后,我们可以使用vacuum full的方式来重建表以回收磁盘空间。但是vacuum full需要持有排它锁,会堵塞读操作。因此一般在生产系统中使用vacuum full变得不太现实。在这种情况下,我们可以使用pg_repack来进行回收垃圾...
PostgreSQL数据恢复工具——pg_filedump
数据库难免会遇到因为某些故障导致数据丢失的情况,此时便需要进行数据恢复。一般情况有备份的话可以直接恢复,但是如果恰好没有备份或者数据文件出现损坏那就比较麻烦了。在PostgreSQL中如果只是一般的数据文件损坏,我们可以直接使用zero_damaged_pages=on来跳过损坏...
PostgreSQL 兼容Oracle insert first
在Oracle中我们经常使用insert all和insert first来实现多表插入的功能。虽然在pg中并不支持同样的语法,但是我们使用pg的CTE语法来实现相同的功能。insert first和insert all最大的区别在于凡是符合第一个条件的就都插入第一个表,其他的数...
PostgreSQL反连接not in优化
两表关联只返回主表与子表没关联上的数据,这种情况即反连接,一般指的是not in和not exsits。例子: –建表插入数据: 说明:a表1000条数据,b表100w条数据,我们想要判断a表中的id在b表的aid中不存在的数据。Seq Scan on a (cost=0.00....
PostgreSQL dblink无法进行索引查询怎么办?
postgresql中我们访问其它数据库常常使用dblink和fdw这两种模块,在官方文档中也是更加建议使用fdw。不知道大家在使用dblink时有没有碰到过这种情况,对于一个常常需要执行的查询,我们往往会在本地创建一个视图来替换,这也是在官方文档中建议的一个方案。但是如果对这种...
PostgreSQL批量数据写入最佳实践
我们常常需要向数据库中导入数据,如果一次性导入大量的数据必然会对性能产生影响,而且这个时间可能还会特别长。这个可能受多方面的影响,例如:表上存在索引、触发器、磁盘IO等等因素。pg9.5之后开始支持unlogged表,这个和Oracle中设置表属性为nologging是一样的:让...
PostgreSQL在线转分区表(避免长锁)
首先,避免数据实时插入,我们需要创建触发器来新插入的数据路由到新的表中。为了避免长时间锁表我们可以在后台进行数据迁移,分批进行迁移等等。该分区表是用来将我们的原普通表数据插入其中,然后对表进行rename。bill-# for values from (minvalue) to ...
PostgreSQL查询表的live tuples和dead tuples
,pg_stat_get_live_tuples(c.,pg_stat_get_dead_tuples(c.
PostgreSQL index monitor——监控未使用和重复索引
数据库中的索引虽然可以大大提升查询的性能,但是大量冗余的索引和没使用的索引不仅会导致DML性能降低,而且会造成空间的浪费。Oracle中可以通过索引跟踪的方法来监控哪些索引是没被使用的,同样在pg中我们可以使用下面两个脚本来对索引进行监控。PSUI.,PSUI.ON PSUI.I...
PostgreSQL快速统计表行数
一般我们统计一张表总共多少数据,大部分人都会去使用count(*)去计算。但如果表数据量特别大,无疑这要执行很久,并且对IO的影响也很明显。 而往往我们并不需要十分精确的去计算某张大表的行数,那么我们可以通过数据库的元数据表去快速估算,但前提是该表的统计信息要尽可能的精确。WHE...
PostgreSQL index monitor——监控哪些表需要创建索引
在数据库的使用过程中,可能某些表随着数据量的增大而因为没有索引仍旧使用的全表扫描,我们可以使用下列脚本来监控哪些大表上需要创建索引。使用下面脚本来查看索引的大小和索引扫描的行数等信息。pt.,t.,pc.,pg_size_pretty(pg_relation_size(quote...
PostgreSQL强制删除正在被使用的库
DETAIL: There is 1 other session using the database.因此,我们需要禁止会话再连接到库中,同时中断掉当前所有连接的会话才可以。
下一页