postgresql 修改表字段_分析DDL语句对PostgreSQL做了什么

本文介绍了如何通过walminer工具来分析DDL语句对PostgreSQL系统表的具体影响,揭示了在创建表等操作时,PostgreSQL在pg_class和pg_attribute等系统表中的变化。通过walminer的系统表解析接口,可以更直观地查看DDL引起的系统表改动。作者计划逐步完善walminer对更多DDL语句的支持。
摘要由CSDN通过智能技术生成
本文作者:李传成 中国PG分会认证专家,瀚高软件资深内核研发工程师

分析DDL语句对PostgreSQL做了什么

资深的PostgreSQL DBA都知道,当我们对PostgreSQL执行一条DDL语句时,PostgreSQL会在pg_class,pg_attribute等系统表执行DML操作,比如执行了CREATE TABLE t1(i int, j int);DDL语句,那么就会在pg_class里插入一条't1'的记录,会在pg_attribute里插入‘i’,'j'还有其他隐藏字段的记录。但是PostgreSQL所做的不仅仅是我们认知的这一点点东西,比如表带有索引,约束,text字段等会往一些表里插入不同的数据。也许你有一些甄别DDL引起的系统表的变化的方法,比如对系统表进行比对,今天给大家带来一种更直观的方法,以SQL的方式展现一条DDL语句对系统表所做的改动。废不多说,直接上货.....

分析方法

有熟悉walminer这个工具的同学,可能了解,walminer可以从wal日志中解析出SQL语句。悄悄的告诉大家PostgreSQL内核中对系统表和对普通表的修改都是一样的接口,都会在wal中产生同样的记录,把walminer的代码轻轻一改,就能解析系统表的变更了,最近我开放了系统表解析的接口,迫不及待跟大家分享一下...

方法演示

正常walminer解析普通表是同样的步骤,只不过在解析之前需要执行select walminer_with_catalog();通知walminer你需要系统表的更改。

-- 数据准备select pg_current_wal_lsn(); pg_current_wal_lsn-------------------- 0/3D07AC28(1 row) postgres=# create table t200( i int, j int);CREATE TABLE postgres=# select pg_current_wal_lsn(); pg_current_wal_lsn-------------------- 0/3D08C0E8(1 row)
-- 执行解析postgres=# select walminer_with_catalog(); walminer_with_catalog----------------------- t(1 row) postgres=# select wal2sql('0/3D07AC28'::pg_lsn, '0/3D08C0E8');NOTICE:  Add wal from current pg_wal directory, do not suggest use this way in produceNOTICE:  Switch wal to 00000001000000000000003D on time 2020-08-05 22:04:06.506044+08       wal2sql       --------------------- pg_minerwal success(1 row)
-- 见证奇迹-- 系统表字段太多,导致结果不是很美观,但不妨碍其正确性postgres=# select op_text from walminer_contents;op_text                                                                                                                                                                             -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值