PostgreSQL Datum类型介绍

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

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

全部回复

上滑加载中

设置昵称

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

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

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