在PostgreSQL中构建基础类型
近在做一些功能兼容的工作,做了一些数据类型的工作。其中一部分是添加新的基础类型,很多细节值得记录一下,在此进行步骤介绍以及代码介绍。
此次要添加一种新的数据类型,这种类型使用的算法和PostgreSQL使用相同的input和output函数。那么接下来就将所有步骤进行演示。
类型信息
- 类型名,newtype;
- 类型长度,pg中显示-1,定长,和bigint相同,实际占用8个字节;
- 使用bigint(int8或int64)的input、output、send、receive函数;
- 能够进行显示、排序、简单比较、建立索引;
实现方法
- 定义基本函数:
- 使用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=#
相关文章