Fork me on GitHub

分类 postgres 中的文章

逻辑复制故障转移

逻辑复制故障转移 主库 10.10.2.11 物理从库 10.10.2.12 逻辑从库 10.10.2.13 测试任务 当主库发生故障,物理复制从库变为新主库。逻辑从库将订阅地址变更为新主库。 开始测试 环境搭建参考 物理复制 逻辑复制 状态查看 复制关系 select * from pg_stat_replication ; -[ RECORD 1 ]----+------------------------------ pid | 2628 usesysid | 24576 usename | repuser application_name | sub1 client_addr | 10.10.2.13 client_hostname | client_port | 40230 backend_start | 2022-11-23 05:46:59.50291+00 backend_xmin | state | streaming sent_lsn | 0/21000140 write_lsn | 0/21000140 flush_lsn | 0/21000140 replay_lsn | 0/21000140 write_lag | flush_lag……

阅读全文

LSN 和 wal日志文件名对应关系

例子 select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn()); pg_current_wal_lsn | pg_walfile_name | pg_walfile_name_offset --------------------+--------------------------+------------------------------------ 2478/BB36EC90 | 0000000300002478000000BB | (0000000300002478000000BB,3599504) (1 row) select x'36EC90'::int ; int4 --------- 3599504 (1 row) 说明 方法 pg_current_wal_lsn():获得当前wal日志写入位置。 pg_walfile_name():转换wal日志位置为文件名。 pg_walfile_name_offset():返回转换后的wal日志文件名和偏移量。……

阅读全文

upset 用法

创建表 DROP TABLE IF EXISTS "goods"; CREATE TABLE "goods" ( "store_cd" int4 NOT NULL, "good_cd" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, "name" varchar(255) COLLATE "pg_catalog"."default" ); INSERT INTO "goods" VALUES (101, '1', '张三'); INSERT INTO "goods" VALUES (102, '2', '李四'); INSERT INTO "goods" VALUES (103, '3', '王五'); ALTER TABLE "goods" ADD CONSTRAINT "pr_cd_key" PRIMARY KEY ("store_cd", "good_cd"); 数据存在则更新数据,不存在则插入数据 --- INSERT INTO GOODS VALUES ( 104, '4', '赵六' ) ON CONFLICT ON CONSTRAINT pr_key_cd DO UPDATE SET NAME = '更新' WHERE GOODS.STORE_CD = '104' AND GOODS.GOOD_CD = '4' ---- pr_key_cd为必须为……

阅读全文

利用debezium 实现数据变更捕获

整个实现以功能演示为目标,便于流程的梳理和理解。不适合正式生成环境使用。 debezium的几种使用方式 单独部署 下游数据传输到cloud,官方目前不推荐 与kafka联合使用 下游数据传输到kafka 嵌入式 例如Flink使用的debezium作为数据的source connetor模块使……

阅读全文

利用hll数据类型进行数据统计

HyperLogLog 使用场景 在应用中统计去重后的个数,传统的方法通常是这么操作 count(distict(xxx))。 如果数据量变大,或统计频繁,性能会越来越差。 可以考虑一个近似统计计算方法hll create extension hll; HyperLogLog 是一种算法, 可以用来估算数据集的基数. 基数是指一个集合中不同值的数目, 等同于 COUNT(DISTINCT field) 返回值. 对于超……

阅读全文

数据库高可用pgautofailover

pg_auto_failover 实践 一个简单的架构 citus同源postgres高可用方案 角色: 主节点 (master) 复制节点 (slave) 监控节点 (monitor) 集群搭建 环境说明 软件版本 postgresql 14.4 pg_auto_failover 1.6.4 centos 7 网络环境 IP 软件 10.10.2.11 monitor 10.10.2.12 master 10.10.2.13 replication 从零开始建设 ​ 没有任何历史包袱,包括数据库自身的搭建 ​ 手动安装 ​ 在所有的节点上执行 -- 数据库安装 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql14-server # install pg_auto_failover curl https://install.citusdata.com/community/rpm.sh……

阅读全文

pg_rewrite

在线分区表 https://github.com/cybertec-postgresql/pg_rewrite 使用测试 PostgreSQL server version 13 or later is required.……

阅读全文

逻辑复制实现数据迁移

DTS 数据迁移服务 实现目标 ​ 平滑将现有在线业务数据库数据迁移到新数据库中。 ​ 如数据库大版本升级、原pg数据库迁移到citus集群、 多数据源汇总等业务场景。 迁移前原库检查 配置检查 -- 源端 wal_level = logical max_replication_slots = 大于1 max_wal_senders = max_worker_processes -- 目标端 max_replication_slots,大于等于该实例总共需要创建的……

阅读全文

pg_buffercache

通过插件查看PG数据缓存 create extension pg_buffercache; 查看当前database缓存使用情况 select c.relname,relname,pg_size_pretty(pg_table_size(c.oid)),pg_size_pretty(count(*) * 8192) as buffered, round(100.0*count(*)/(select setting FROM pg_settings where name = 'shared_buffers')::integer,1) as buffer_percent, round(100.0 * count(*) * 8192/pg_table_size(c.oid)) as percent_of_table from pg_class c inner join pg_buffercache b on b.relfilenode = c.relfilenode inner join pg_database d on (b.reldatabase = d.oid and d.datname = current_database()) group by c.oid ,c.relname order by 3 desc limit 10;……

阅读全文

数据库免密码登陆

免密登陆 以下几种PG配置免密的方法。 方法一:设置pg_hab.conf 认证方式为trust #Type database user address method host all postgres 127.0.0.1/32 trust 该方式最不安全,导致通过指定IP连接数据库的连接都可以任意登录数据,毫无安全保障。禁止在生产环境使用。 方法二:设置PG环境变量PGPASSWORD PGPASSWORD是P……

阅读全文