gpt4 book ai didi

c - Postgresql C函数时间戳转换

转载 作者:行者123 更新时间:2023-11-30 17:44:33 24 4
gpt4 key购买 nike

在自定义C函数中如何将字符串(例如“2012-01-10”)日期转换为unix时间戳?

我的意思是是否有一些 C 技巧可以完成这项工作或进行一些转换?或者我需要使用 SQL调用:

SELECT extract(epoch FROM date('2012-01-10'));

这不是性能损失吗?

我看过一个例子

PGtimestamptz ts; 
res = PQexef("select now()");
PQgetf(res, 0, "%timestamptz", 0 , &ts);
int epoch = ts.epoch;

我已经安装了 libpqtypes,但该示例似乎不完整并且不起作用

有人可以建议这种转换的最佳方法和/或提供使用 libpqtypes 开发 postgresql 自定义 C 函数的完整示例吗?

我在 Linux 机器上使用 PostgreSQl 9.3

非常感谢

卢卡

最佳答案

在PostgreSQL(服务器端)内部(您谈论PostgreSQL自定义函数),您可以使用两种可能的路径:

a) 您可以调用“in”函数来获取预期类型 - 时间戳b) 你可以调用 to_time 函数

相关调用可能如下所示:

Timestamp t;t = DatumGetTimestamp(DirectFunctionCall2(to_timestamp,                               CStringGetTextDatum("2013-08-15"),                               CStringGetTextDatum("YYYY-MM-DD"));

当然,您可以使用 POSIX 库,但您无法确定可移植性和 future 的兼容性。这是服务器端 - 您将将此技术用于 PostgreSQL 自定义 C 函数。

在客户端取决于预期的速度。通过 SQL 调用使用服务器端转换通常是简单、可移植且速度足够快的解决方案。典型的瓶颈是 IO,因此您不需要在典型用例中优化 CPU - 并且您可以使用简单且可移植的解决方案(使用文本而不是二进制)。关于 PGtimestamp 的一些信息有 http://libpqtypes.esilo.com/man3/pqt-handlers.html

关于c - Postgresql C函数时间戳转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com