You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AGE中是否有类似float8in_internal_null()的整数类型转换函数?

在AGE中实现转换失败返回NULL的整数转换逻辑

AGE 基于 PostgreSQL 构建,你可以利用 PG 生态的安全转换函数,配合错误捕获逻辑实现转换失败返回 NULL 的需求,以此替代atoi()的局限。

可用的核心函数

PostgreSQL 提供了专门的字符串转整数函数,它们在转换失败时会抛出明确错误而非返回0:

  • pg_strtoint32(const char *str):转换为32位整数
  • pg_strtoint64(const char *str):转换为64位整数
  • pg_strtoint16(const char *str):转换为16位整数

封装为返回NULL的函数示例

通过PG_TRY/PG_CATCH块捕获转换错误,返回NULL,逻辑和float8in_internal_null()对齐:

#include "postgres.h"
#include "utils/builtins.h"

int32* str_to_int32_null(const char *input_str) {
    if (input_str == NULL || *input_str == '\0')
        return NULL;

    int32 *int_val = palloc(sizeof(int32));
    PG_TRY();
    {
        *int_val = pg_strtoint32(input_str);
        return int_val;
    }
    PG_CATCH();
    {
        pfree(int_val);
        return NULL;
    }
    PG_END_TRY();
}

手动实现的替代思路

如果需要完全自定义转换逻辑,可参考float8in_internal_null()的写法:

  1. 使用strtol()/strtoll()进行转换
  2. 检查errno判断溢出、非法字符等错误
  3. 失败时直接返回NULL,成功返回转换后的值

注意点

  • AGE 扩展开发中必须使用 PG 提供的内存管理函数palloc()/pfree(),避免内存泄漏
  • 根据你的整数类型需求选择对应转换函数,确保类型匹配

内容的提问来源于stack exchange,提问作者Marcos Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:32:21