PostgreSQL Datum类型介绍

举报
宁谷花雨 发表于 2022/07/11 15:04:34 2022/07/11
3.8k+ 0 0
【摘要】 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 */typed...

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。