Postgresql c函数时间戳转换

时间:2013-11-13 10:21:09

标签: c postgresql

在自定义 C函数中如何将字符串(es。'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

非常感谢

卢卡

1 个答案:

答案 0 :(得分:0)

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

a)你可以为预期的类型 - 时间戳调用“in”函数 b)你可以调用to_time函数

相关电话可能如下:

Timestamp t;

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

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

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