自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

魂醉的一亩二分地

夜阑风静縠纹平。小舟从此逝,江海寄余生。

  • 博客(433)
  • 资源 (1)
  • 收藏
  • 关注

原创 PostgreSQL将在15版本支持MERGE INTO语法

MERGE语法可以参考如下:https://www.postgresql.org/docs/devel/sql-merge.html[ WITH with_query [, ...] ]MERGE INTO target_table_name [ [ AS ] target_alias ]USING data_source ON join_conditionwhen_clause [...]where data_source is{ source_table_name | ( source

2022-05-04 16:06:20 3231

原创 Postgresql逻辑复制报错could not start WAL streaming: ERROR: replication slot “x“is active for PID xxx

先看日志错误:#发布端报错如下:2022-04-01 10:18:23.812 CST,"postgres","hank",4666,"10.4.9.250:49138",624660ef.123a,1,"idle",2022-04-01 10:18:23 CST,10/0,0,ERROR,55006,"replication slot ""sub"" is active for PID 4575",,,,,,,,,"sub"2022-04-01 10:18:28.826 CST,"postgres"

2022-04-01 11:18:52 3672

原创 Postgresql审计插件pgaudit使用说明

最近由于审计,rds的审计成了问题,因为很多权限没开放出来,但是很多云厂商提供了pgaudit插件,这里简单介绍下吧,虽然没有达到想要的预期。pgaudit和postgresql版本兼容性匹配列表:pgAudit v1.6.X is intended to support PostgreSQL 14.pgAudit v1.5.X is intended to support PostgreSQL 13.pgAudit v1.4.X is intended to support PostgreSQL

2022-03-28 16:54:09 2884

转载 Postgresql查询优化相关插件

进行SQL优化之前,我们要找出相应的SQL,如何找,可以通过以下一些插件进行抓取。pg_stat_statements 可以根据执行SQL的时长找出相关查询语句,具体使用可以参考https://www.postgresql.org/docs/current/pgstatstatements.htmlpg_stat_kcache是一个用于检测系统和用户CPU使用比较高的模块。如果你的系统检测CPU使用率比较高,则可以使用该模块来查看是哪些查询导致了这种情况。需要单独下载使用:http://a

2022-03-07 15:30:40 985

原创 Postgresql动态共享内存类型

linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型。在Postgresql中可以使用dynamic_shared_memory_type参数指定共享内存类型。默认使用posix,修改参数后需要重启数据库。dynamic_shared_memory_type = posix # the default is the first option

2022-03-02 18:06:47 2507

原创 一款分析linux上应用程序分析的工具----0x.tools

0x.tools是一个用于分析Linux上应用程序性能的开源实用程序。部署简单且依赖性小。无需升级操作系统、安装内核模块、繁重的监控框架、Java代理或数据库。这款工具还适用于十多年前的Linux内核,如14年前的2.6.18版本。包含的工具:安装和使用:$ git clone https://github.com/tanelpoder/0xtools$ make$ make install具体使用示例请参考:https://0x.tools/#installation–usage$ x

2022-03-01 11:10:05 1628

原创 Postgresql中如何执行动态DDL语句

什么是动态SQL在执行PL/pgSQL函数或SQL时,有时需要生成动态命令,因为命令涉及不同表或数据类型,仅在运行时才能确定具体对象或值。这时就很适合使用动态SQL。这里不过多解释,看下实例就很好理解了。生成动态SQL的几种方式使用 || 进行拼接#查看序列当前使用值并加1postgres=# select 'ALTER SEQUENCE '||sequencename||' RESTART '||last_value+1 from pg_sequences where last_value

2022-02-24 11:17:48 1841

原创 Postgresql中TCP keepalive相关设置使用

数据库连接描述提起TCP keepalive相关的设置,就避不开数据库连接这个话题,目前大部分使用环境,数据库连接都是长连接,也就是说连接可以复用。由于数据库建立连接和HTTP连接还不一样,HTTP是无状态的,新建连接的代价比较小,但是和数据库建立连接代价高多了,因为数据库连接不是无状态的;比如,在关闭连接的情况下,将会丢失打开的事务、临时表和prepare语句。而且连接进程都是由postgres主进程fork,fork也有相应的代价,所以数据库有一些空闲会话是正常的,但是保持太长时间大量的空闲会话也是

2022-02-22 17:48:39 5719

原创 Postgresql Extended Statistics(自定义统计信息)

正常情况下,数据库只会按单列收集统计信息,无法捕捉到任何关于跨列的相关性信息。扩展统计信息是从10版本引入,可以通过命令 CREATE STATISTICS 创建多列相关的统计信息。因为一个表一般有多个列,多列的任意组合很大,所以自动收集多列统计信息不现实,而我们可以根据自己的需求自己来创建多列的统计信息,这样可以让相关查询执行计划更加准确。下面举例介绍几种扩展统计的几种类型:Functional DependenciesMultivariate N-Distinct CountsMultiva

2022-01-25 20:20:13 1038

原创 Postgresql主备切换后逻辑复制槽处理的几种方式

到目前为止的版本,PG原生版本不支持逻辑复制槽的failover,这使得以下几种使用情况必须注意:在主备切换之后,需要手工去创建复制槽,而且订阅端极有可能丢失数据,因为创建复制槽的过程会有时间间隙。pg_upgrade进行大版本升级时,slot也会被清理这里我给出几种方式可以进行slot的failover,有喜欢的可以尝试一下可以使用拷贝文件的方式,正常情况standby节点pg_replslot目录下没有文件,需要从主节点拷贝该文件目录到备节点,然后重启备节点即可,在备节点提升为主节点之前,

2022-01-17 18:06:03 2936

原创 Postgresql之Covering Indexes介绍

Covering Indexes for B-trees (INCLUDE)从11开始引入Covering indexes for GiST (INCLUDE) 从12开始引入目前仅支持以上类型的索引(B-trees,GiST)。为什么使用覆盖索引呢?覆盖索引可以不需要回表,即减少了IO,使用index-only scan扫描即可拿到需要的数据。通过下图,我们可以比较和普通的B-tree的区别如图:左边是索引,后面是table,最底层的叶子节点,是一个双向链表。查找数据的时候,我们就会遍历这

2022-01-11 17:32:58 629

原创 Postgresql存储引擎zheap介绍以及测试

这款存储引擎也是Cybertec公司开发的,目前处于测试阶段,因为Postrgesql的表都是以heap形式存储的,MVCC机制中对删除或者更新的行使用的是根据事物号设置可见或者不可见,所以导致Postgresql中的表在频繁更新和删除的情况下,极易膨胀。而zheap则是类似引入了undo的技术,oracle和mysql就是使用此技术,所以不会有表膨胀的情况。有兴趣的同学可以安装试玩一下,生产千万不要用哦,bug很多。github地址:https://github.com/cybertecpostgr

2021-12-30 17:18:50 3126 1

原创 Postgresql在线分区插件之pg_rewrite使用

在使用数据库的过程中,有一些表开始无法估量大小,后面表变大后,需要做分区表,那么是一件比较烦人的事情,现在好了,有了cybertec公司这款插件,轻松实现。说到这个功能,Oracle从很早就有了,叫在线重定义,而且锁粒度也很小,DML不影响。这个功能还是比较实用的,现在PG终于也有了类似的功能。前置条件:支持13或者13以后的版本设置PG_CONFIG环境变量指向PostgreSQL安装的PG_CONFIG命令make && make install配置postgresql.c

2021-12-30 14:00:54 1304 3

原创 Postgresql之amcheck验证索引完整性

Postgresql提供了该插件验证索引或者是表的逻辑一致性。比如系统升级后,collate和原来不一致,数据库里索引的顺序和该collate不匹配。create extension if not exists amcheck;set statement_timeout to 0;do $$declare r record; sql text; ts_pre timestamptz; e_message text; e_detail text; e_context text;

2021-12-20 14:58:26 1114

翻译 Postgresql鲜为人知的一些功能(二)

接Postgresql鲜为人知的一些功能(一),继续介绍下面的一些功能。引用$符号如果我们在数据库中存储一段文本,如果文本中有单引号,那么我们需要’来转义。db=# SELECT 'John''s Pizza'; ?column────────────── John's Pizza但是,文本中如果有很多需要的转义字符的时候,那将变的很麻烦,pg提供了$$符号的方法,例子如下:db=# SELECT $$a longstring with new linesand 'single

2021-12-08 16:51:31 1436

翻译 Postgresql鲜为人知的一些功能(一)

无意之中看到一篇文章,感觉很有意思,特翻译记录一下,题目写的是鲜为人知,但是对于一些玩PG的老鸟,其实并不鲜为人知。个人感觉文章太长不便阅读,故分为两篇文章描述。目录upsert的时候获取更新和插入的行数列级权限多个模糊匹配在不推进的情况下查找序列的当前值将\copy与多行SQL一起使用主键自动生成的方式生成数据透视表的两种方法$符号的引用数据库对象的注释为每个数据库保留一个单独的psql_history保留关键字大写sleep间隔函数说明获取没有子查询的组中的第一行或最后一行

2021-12-07 20:57:45 1234

原创 Postgresql中使用varchar(n)比varchar()和text节省空间吗?

我们看下PG中的字符类型:名称描述character varying(n), varchar(n)有长度限制的变长字符类型character(n), char(n)定长字符类型,插入字符长度不够,空格补充text没有长度限制的变长字符类型简要说明:varchar(n) 和 char(n) 分别是character varying(n) 和 character(n)的别名,如果不指定n值,那么character varying可以存储任意尺寸的字符串,有点类似于

2021-12-02 15:28:13 3728

原创 Postgresql13.1增量排序BUG

13版本新特性新增了增量排序,本来是为了排序提升性能,但是13.1版本存在BUG实例如下:以上取值明显是错误的我的测试环境13.4已经修复改BUG大概来说,由于索引列的值出现的次数超过DEFAULT_MAX_FULL_SORT_GROUP_SIZE(64),则会调用switchToPresortedPrefixMode函数。在这个函数中,在读取最后一个元组并判断它不属于前一个组之后,就会从for循环中中断。然而,由于lastTuple被设置为true,后续进程将错误地认为该元组已被放入 pref

2021-11-26 18:04:59 757

原创 Postgresql插件之pg_gather

github地址: https://github.com/jobinau/pg_gather是一款使用SQL脚本收集postgresql数据库配置和性能相关指标的工具。使用很简单:操作用户建议有superuser, rds_superuser角色权限采集数据psql <connection_parameters_if_any> -X -f gather.sql > out.txt导入数据sed -e '/^Pager/d; /^Tuples/d; /^Output/d; /

2021-11-17 15:15:21 1004

转载 Mysql之binlog2sql介绍

一款可以解析binlog日志到sql的工具,如下:https://github.com/danfengcao/binlog2sql

2021-11-02 17:32:07 233

翻译 Postgresql几种定时调度任务工具的比较

让我们看一下以下的比较表。如果想了解更多相关的信息,可以查看相关以下工具的相关文档。pg_timetable: https://github.com/cybertec-postgresql/pg_timetablepg_cron: https://github.com/citusdata/pg_cronpgAgent: https://github.com/postgres/pgagentjpgAgent: https://github.com/GoSimpleLLC/jpgAgentpgbuc

2021-11-02 15:05:25 1293

翻译 Postgresql之产生序列间隙的几种情况

由回滚导致的序列间隙如下例子:插入2的时候失败,后续成功插入的值为3第二个语句回滚了,但是序列值2没有回滚,形成了一个间隙CREATE TABLE be_positive ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, value integer CHECK (value > 0)); -- the identity column is backed by a sequence:SELECT pg_get_ser.

2021-11-01 15:56:40 709

原创 Postgresql行安全策略(Row Security Policies)

PG行安全策略其实就是对不同用户,不同行数据的可见性,和可修改性。在我看来其实就是权限的维度不同,PG在9.5之前提供表级别,列级别的权限控制,9.5之后添加行级策略,这样用户就可以更加灵活的控制数据,对不同用户之间的数据隐私起到了保护作用。先举一个列权限的例子,也可以通过视图的方式进行权限限制:#一张表sex\c postgres postgres postgres=> \d sex Table "public.sex" Column |

2021-10-29 14:16:30 1318

原创 Postgresql之TOAST技术解析

那么什么是TOAST呢?先抛出一个概念解释:TOAST是The Oversized-Attribute Storage Technique的缩写,直译比较难理解,我们这里叫行外存储技术。因为在PostgreSQL中,一条记录不能跨PAGE存储,毕竟默认一个PAGE只有8K,不能存储很大的值,所以存储大字段的值,就使用TOAST存储。它和原表的数据是分开存储的。TOAST存储的表并不能单独创建,只有当普通表包含了main,extended或external存储格式的字段时,系统会自动创建一个和普通表关联的TO

2021-10-25 16:12:54 1679

原创 Postgresql中order by limit 索引选择错误导致查询很慢

开发今天发来一条SQL,说执行很慢,出不来结果,如下:select id, user_id, k_money_value, channel, status, add_time, note from hist_kmoney_record where user_id=133423946 order by id desc limit 10;表大小,记录数,索引信息如下:melotpay=# select count(id) from hist_kmoney_record ; count --

2021-10-12 18:21:30 3719 1

原创 Postgresql插件pg_bulkload

pg_bulkload为用户提供了高速的数据载入能力,绕过了wal和shared buffer,所以在效率上比copy更高。当然也有引入了一些新的问题,使用该插件有一些限制。使用pg_bulkload需要注意, 如果选择了direct模式导入, 会绕过wal, 以前的备份就无法使用wal,当然也无法基于过去的备份恢复到载入数据之后的时间点,PITR的归档恢复也就不可用, 所以必须在bulk load后做一次全量备份. 而且如果有逻辑订阅、物理standby, 都无法接受这些bulk load写入的数据,所

2021-09-27 10:42:20 773

原创 Postgresql修正序列插件之pg_sequence_fixer

如下例子,手动插入数据后,再使用默认的序列会报错,序列不能自动识别表中已使用的最大值。#创建测试表<16:28:43><db:hank><user:postgres><pid:30677>=# CREATE TABLE t_test_seq ((# id serial PRIMARY KEY, (# info text(# );CREATE TABLE#使用序列自动填充,插入两条数据<16

2021-09-07 16:58:37 432

原创 Postgresql并行计算配置

并行计算进程相关参数:#worker总进程数,默认8,修改后需要重启数据库max_worker_processes#所有session同时并行计算最大并行进程数,默认8max_parallel_workers#单条查询中,每个node最多允许开启的并行计算的进程数,设置为0,表示禁用并行计算max_parallel_workers_per_gather#也可以单独设置表级别并行度 alter table tb1 set (parallel_workers=4);ALTER TABLE

2021-08-19 15:32:17 1028

原创 Red Hat Enterprise Linux中free输出和/proc/meminfo中值的对应关系

free -k 输出 (RHEL 5 and RHEL 6): total used free shared buffers cachedMem: 7778104 2971960 4806144 0 211756 1071092-/+ buffers/cache: 1689112 6088992Swap: 4194296 0 41

2021-08-03 14:11:41 436

原创 Postgresql报告收集之开源工具pgmetrics介绍

pgmetrics是一个开源,零依赖的二进制工具,用于收集和报告运行中的PostgreSQL服务器上的各种统计数据和信息,以帮助故障排除、监控以及自动化。并可以以文本格式显示,或者以JSON和CSV格式导出。可以收集以下版本信息:PostgreSQL versions:9.3到13版本可以收集安装极其简单:可参考:https://pgmetrics.io/docs/install.htmlwget https://github.com/rapidloop/pgmetrics/releases/do

2021-08-02 17:13:58 433

原创 Postgresql使用ssh隧道连接数据库

如果数据从本地导入到远端的话,可通过建立ssh隧道,使用本地端口即可连接远端数据库,使用起来更加方便快捷,命令如下:#-C表示请求压缩所有数据,默认使用gzipssh -C -L local_port:localhost:remote_port remote_user@remote_ip实例:#建立ssh隧道ssh -C -L 666666:localhost:1921 root@8.1xx.2xx.9x#另外在本地shell使用该端口可连接远端的数据库psql -h 127.0.0.1

2021-07-23 15:03:47 1776 1

原创 Postgresql13之FETCH FIRST ROWS … WITH TIES展示打结的行

也算是13的新特性吧,是看了一篇文章觉的很有意思,所以拿出来做下实验。相信大家在使用翻页的时候,一般都会使用limit offset子句,但是其实这个是不符合SQL标准的,我们看看符合SQL标准的FETCH FIRST 子句如何使用。先看下limit offset子句LIMIT { count | ALL }OFFSET startcount表示返回的最大行数start指定跳过的行数如果count为null,那么就是显示所有行,即limit all#创建测试表,插入数据,select语句均

2021-07-22 20:24:14 947

原创 Postgresql LATERAL例子

lateral 子查询可以支持横向连接外面的表,在FROM 或者JOIN子句的子查询里面可以关联查询LATERAL前面的FROM子句或者JOIN子句,通过例子看如何使用:#创建测试表并初始化数据CREATE TABLE t_product AS SELECT id AS product_id, id * 10 * random() AS price, 'product ' || id AS product FROM generate

2021-07-21 15:40:24 1145

原创 Postgresql之pgcompacttable

PG表膨胀的解决另一个工具,不过看时间,已经很久没更新维护了。安装前需要安装pgstattuple插件,因为要基于该插件去查找膨胀的表,所以如果有大表的情况下,因为pgstattuple会扫全表,所以会比较耗时,这个是使用的时候一定要注意一下。原理:从表的头部填充新的行,在普通vacuum时候,截断表末尾的空page,达到收缩空间的效果。不需要占用额外的空间,使得表文件更加紧凑。而且不会加比较重的锁。对性能影响较小。具体安装使用如下https://github.com/dataesgret/pgc

2021-07-20 10:52:36 481

原创 Postgresql修改时区

首先修改时区的参数为timezone如:<10:28:18><db:postgres><user:postgres><pid:26229>=# show timezone; TimeZone ─────────────── Asia/Shanghai(1 row)如果是自建的数据库,那么修改配置文件postgresql.conf 或者通过数据库命令修改均可以,修改后,只需reload即可。<10:29:49><db

2021-07-16 10:44:55 2910

原创 Postgresql 原生pub/sub订阅端触发器如何控制

参数和表设置前面一篇文章已经介绍过,但是这里还是有一些和pglogical不一样的地方。如果表设置为default,无论session_replication_role设置为什么,都不会触发触发器如果表设置为replica,无论session_replication_role设置为什么,都会触发触发器如果表设置为always,无论session_replication_role设置为什么,都会触发触发器如果表设置为replica,无论session_replication_role设置为什么,都

2021-07-13 10:43:26 596

原创 Postgresql pglogical订阅端触发器如何控制

如果我们使用pglogical,表上有触发器,在复制的时候,肯定会考虑复制的时候触发器是否触发,根据官方文档,这个是可以自己控制的。如下:alter table xxxxx DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER该命令会加一个SHARE ROW EXCLUSIVE锁。表上的触发器由session_replication_role参数控制,值可以是 origin (默认), replica和local,分别有以下几种情况如果不写 [ REPLICA

2021-07-13 09:33:04 476

原创 Postgresql psqlrc文件使用

psqlrc文件作用:psql在连接数据库之前,首先会读取并执行改文件中的命令,然后连接到数据库,如果加上-X参数,则跳过该文件。所以通过该文件可以设置客户端或者是服务端的风格。系统范围内,改文件可以通过pg_config --sysconfdir命令查看,默认在etc相关的可执行文件目录,目录的名字也可以通过配置环境变量PGSYSCONFDIR来设置。用户个人使用的文件名是.psqlrc,可以用过环境变量PSQLRC配置。一般在用户home目录下,如~/.psqlrc。我们看几个常用的元命令,此篇

2021-07-07 18:09:36 1140

原创 Postgresql逻辑复制DDL插件pgl_ddl_deploy

pgl_ddl_deploy可以支持DDL复制,不过目前版本只支pg13持原生的逻辑复制,13之前的版本,需要安装pglogical,也就是需要部署两个插件。所以对于使用pg13版本的同学,可以单独使用该插件,以后就再也不用担心字段变更的时候,两边表字段不一致,导致复制槽false了。部署安装实例可参考如下:https://github.com/enova/pgl_ddl_deploy...

2021-07-05 16:12:47 726

原创 Postgresql从MD5密码验证改为SCRAM-SHA-256

随着密码学技术的发展,MD5哈希算法构造的密码越来越不安全,所以,PG顺应发展,从10版本开始支持了SCRAM-SHA-256加密算法,因为使用的新的哈希算法。使得在暴力破解的时候花费的代价更加昂贵。那么,接下来,在PG中看一下如何从MD5切换到SCRAM-SHA-256。首先,太老的的驱动不支持SCRAM-SHA-256,都会报错,如JDBC,会报The authentication type 10 is not supported。那么就需要升级驱动。接下来就是数据库服务端修改配置:#修改post

2021-06-28 17:57:54 4711

GREENPLUM管理向导

This guide provides information and instructions for configuring, maintaining and using a Greenplum Database system. This guide is intended for system and database administrators responsible for managing a Greenplum Database system. This guide assumes knowledge of Linux/UNIX system administration, database management systems, database administration, and structured query language (SQL). Because Greenplum Database is based on PostgreSQL 8.2.14, this guide assumes some familiarity with PostgreSQL. Links and cross-references to PostgreSQL documentation are provided throughout this guide for features that are similar to those in Greenplum Database.

2018-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除