在PostgreSQL中构建基础类型

2020-06-17 00:00:00 函数 操作 增加 定义 类型

近在做一些功能兼容的工作,做了一些数据类型的工作。其中一部分是添加新的基础类型,很多细节值得记录一下,在此进行步骤介绍以及代码介绍。

此次要添加一种新的数据类型,这种类型使用的算法和PostgreSQL使用相同的input和output函数。那么接下来就将所有步骤进行演示。

类型信息

  1. 类型名,newtype;
  2. 类型长度,pg中显示-1,定长,和bigint相同,实际占用8个字节;
  3. 使用bigint(int8或int64)的input、output、send、receive函数;
  4. 能够进行显示、排序、简单比较、建立索引;

实现方法

  1. 定义基本函数:
  • 使用unused_oids,确定oid
  • newtypein,newtypeout,newtyperecv,new*end[1]
  • 在系统表pg_proc中注册相关以上4个函数

2. 定义基础类型:

  • 在系统表pg_type中注册类型newtype
  • 在bootstrap注册基础类型[2]

3. 实验效果:

shawn@B-D53RLVDL-1650 bin % ./psql postgres
psql (13devel)
Type "help" for help.

postgres=# create table testnewtype(t1 newtype);
CREATE TABLE
postgres=# insert into testnewtype values ('1'),('2');
INSERT  2
postgres=# checkpoint ;
CHECKPOINT
postgres=# select * from testnewtype ;
 t1 
----
 1
 2
(2 rows)

postgres=# 

相关文章