在自定义 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
非常感谢
卢卡
答案 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