Function Postgres(8.0.2.,红移)SQL函数定义,错误“;光标不位于语句内部;
我是postgresql的超级高手。但是我需要定义一个func,它将Function Postgres(8.0.2.,红移)SQL函数定义,错误“;光标不位于语句内部;,function,amazon-redshift,function-declaration,Function,Amazon Redshift,Function Declaration,我是postgresql的超级高手。但是我需要定义一个func,它将map:int-->datetime 在阅读了文档之后,我想到了以下几点: CREATE FUNCTION fut(num integer) RETURNS datetime -- convert a UNIX time integer into the datetime timestamp AS $$ select timestamp 'epoch'+interval '1 second'*num; $$
map:int-->datetime
在阅读了文档之后,我想到了以下几点:
CREATE FUNCTION fut(num integer) RETURNS datetime
-- convert a UNIX time integer into the datetime timestamp
AS $$ select timestamp 'epoch'+interval '1 second'*num; $$
LANGUAGE plpgsql;
select fut(500);
但它又回来了
The cursor is not located inside a statement!
您能告诉我我做错了什么吗?据我从您的函数中了解,您希望将保存为整数类型的值的秒数(即自1970年1月1日UTC 00:00:00以来的秒数)转换为有效类型的值 如果是这样,则不必为这种转换创建新函数,只需使用预定义的postgresql函数即可,例如:
# select to_timestamp(500);
to_timestamp
------------------------
1970-01-01 03:08:20+03
(1 row)
据我所知,红移甚至不允许用户定义函数。是的:用户定义的函数和存储过程。所以我觉得你很不走运 搜索红移历元到时间戳或红移
到_timestamp
发现许多其他人已经研究过这一点:
TIMESTAMP 'epoch' + myunixtime * INTERVAL '1 Second '
这就是你看起来已经在做的事情。这是您将得到的最好结果,因为红移不支持用户定义的函数。您使用的是真正旧的PostgreSQL版本吗?
创建函数
应该失败,因为函数体的格式完全不正确;您编写了一个SQL函数,但声明了它plpgsql
。您应该得到错误:键入“datetime”不存在
,如果您解决了这个问题,您应该在“select”或其附近得到错误:语法错误。我得到了8.0.2。你能给我一个简短的建议它有什么问题吗?8.0.2?哇!是时候升级到不那么史前的东西了。如果你使用的是一个古老的PostgreSQL,你必须在你的问题中提到它,因为答案将假定你能够访问过去十年中引入的特性、函数、语法等。如果您实际使用的是类似红移的叉子,那么更重要的是这样说,因为它们往往会被大量修改。对于函数:PostgreSQL中没有datetime
数据类型,请使用timestamp
。声明函数sql
不是plpgsql
。to_timestamp
内置函数在当前PostgreSQL版本上实现了您想要的功能。谢谢Craig。8.0.2中似乎不存在已编辑的帖子。所以我必须定义我自己的func。@使用8.0.2的AVX是您在提问时提到的东西。这有点像是说“嘿,Chrome不会安装在我的电脑上”,当被问到这台电脑是什么时,你提到它是一台运行Windows95的486。谢谢,Craig。在问题中更新。很酷的类比:)谢谢你这么详细的解释,克雷格!