ef dbfirst后 添加表_PostgreSQL内核添加自定义系统表

本文详细介绍了如何在PostgreSQL 12中添加一个名为pg_sqltext的自定义系统表,包括分配OID、创建表结构、建立sql_handle字段的唯一索引以及添加本地缓存的过程。通过这些步骤,可以实现对pg_sqltext表的有效管理和查询优化。
摘要由CSDN通过智能技术生成

本篇文章介绍如何向PG 12中添加自定义的系统表。

目标:

  • 添加一张名为pg_sqltext的系统表;

  • 根据表中的sql_handle字段建立索引;

  • 添加系统表pg_sqltext对应的本地缓存;


实现过程:

1. 添加名为pg_sqltext的系统表
1.1 为需要添加的系统表分配可用的OID
123
cd src/include/catalogchmod +x unused_oids./unused_oids

从列出的未使用OID中选择一个分配给pg_sqltext,本文选择的是3434

1.2 在src/include/catalog目录下添加相应的系统表头文件
123456789101112131415161718192021
#ifndef PG_SQLTEXT_H#define PG_SQLTEXT_H#include "catalog/genbki.h"#include "catalog/pg_sqltext_d.h"CATALOG(pg_sqltext, 3434, SQLTEXTRELATIONID){	Oid			oid;			/* oid */    int32       executions;#ifdef CATALOG_VARLEN			/* variable-length fields start here */	text        sql_handle;    text        sql_text;    timestamptz created;    timestamptz last_executed;#endif    } FormData_pg_sqltext;typedef FormData_pg_sqltext *Form_pg_sqltext;#endif						/* PG_SQLTEXT_H */
1.3 在src/backend/catalog/MakeFile文件中添加对应的系统表头文件

8d4f0a83a109c0c83e84fc52de59a068.png

2. 根据表中的sql_handle字段建立索引

2.1 在src/include/catalog/indexing.h添加相应的索引数据
12
DECLARE_UNIQUE_INDEX(pg_sqltext_sql_handle_index, 4187, on pg_sqltext using btree(sql_handle text_ops));#define SqlTextSqlHandleIndexId  4187

说明:这里在sql_handle字段上建立了一个名为pg_sqltext_sql_handle_index的唯一索引,内部使用BTee实现。

注意:索引同样需要分配OID,参考1.1的方式为该索引分配合适的OID。

3. 添加系统表pg_sqltext对应的本地缓存
3.1 在头文件src/include/utils/syscache.h中添加pg_sqltext对应的缓存标识

在枚举类型SysCacheIdentifier中添加pg_sqltext对应的缓存标识:

3f02dd9a60cb3707fdccf54879bfa8f0.png

注意:这里需要按照字母顺序进行添加

3.2 在src/backend/utils/cache/syscache.c添加pg_sqltext对应的缓存结构

在数组cacheinfo中添加pg_sqltext对应的缓存结构:

753da2d4f7f0ad84e4d0545446f6eaad.png

注意:这里需要与2.1中添加的索引名字对应,同时需要与SysCacheIdentifier中对应的缓存标识顺序一致。


以上就是向PG内核中添加一个系统表的全部过程,可以编译安装后使用\d+ pg_sqltext命令测试下是否添加成功。

本文有什么错误或不足之处,欢迎指出~

更多内容欢迎点击下方

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值