PostgreSQL Datum类型介绍
1、
《C语言》stdint.h 文件中定义了int16_t 、 uint32_t 、 int64_t、uintptr_t等数据类型。
typedef unsigned long int uintptr_t
2、
typedef uintptr_t Datum;
typedef signed int int32; /* == 32 bits */
typedef unsigned int uint32; /* == 32 bits */
typedef char *Pointer;
#define Int32GetDatum(X) ((Datum) (X))
#define DatumGetInt32(X) ((int32) (X))
#define UInt32GetDatum(X) ((Datum) (X))
#define DatumGetUInt32(X) ((uint32) (X))
#define DatumGetPointer(X) ((Pointer) (X))
#define PointerGetDatum(X) ((Datum) (X))
Datum是PostgreSQL中C语言函数中使用的数据类型之一,它可以表示有效SQL类型中的任何值。Datum就像是void *,不同的就是携带了额外的大小信息。
Datum就是一个8字节的整数,
1)数值类型和Datum互转: 就是整数之间的互转
2)指针类型和Datum互转:就把指针地址和8字节整数值的互转
int32 input = 100;
int32 *pi = &input;
int32 *po;
datum = PointerGetDatum(pi);
po = (int32 *)DatumGetPointer(datum);
(gdb) p *pi
$6 = 100
(gdb) p pi
$4 = (int32 *) 0x7fffffffe49c
(gdb) p datum
$10 = 140737488348316 <---- 0x7fffffffe49c 的10进制值就是 140737488348316
(gdb) p (uintptr_t)pi // 指针地址 转为10进制值
$5 = 140737488348316
(gdb) p *pi // 通过指针地址显示具体的值
$6 = 100
(gdb) p *(int32*)140737488348316 // 10进制值转成int32 *指针地址
$7 = 100
(gdb) p *(int32*)0x7fffffffe49c
$11 = 100
- 点赞
- 收藏
- 关注作者
评论(0)