如何在postgresql"json"数据类型中存储日期以用于plv8?

jpi*_*pic 3 sql postgresql datetime json

我想使用Date.UTC在postgresql 9.2"json"字段中存储日期和日期时间,但当然它失败了:

hp=> update formapp_record set data='{"dt": Date.UTC(120, 10, 2)}' where id=17;
ERROR:  invalid input syntax for type json
LINE 1: update formapp_record set data='{"dt": Date.UTC(120, 10, 2)}...
                                       ^
DETAIL:  Token "Date" is invalid.
CONTEXT:  JSON data, line 1: {"dt": Date...
Run Code Online (Sandbox Code Playgroud)

可以直接存储UTC时间戳,但是解码器怎么知道该值应该解码为日期或日期时间而不是int?

也可以将Date.UTC调用存储为字符串,如下所示:

update formapp_record set data='{"dt": "Date.UTC(120, 10, 2)"}' where id=17;
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它需要0.检查字符串是否以Date.UTC开头,并且1.在plv8中使用eval

解决方案是存储一些元数据,如:

update formapp_record set data='{"dt": {"_type": "date", "_value": [120, 10, 2]}}' where id=17;
Run Code Online (Sandbox Code Playgroud)

但那不是很"标准",甚至是"黑客".

你对这件事有什么看法?

Cra*_*ger 5

唉,json对日期一无所知.

我将ISO 8601日期存储为字符串.是的,这很痛苦.是的,这意味着没有很好的标准方式来告诉"这是一个约会"与"这是一个字符串".不过,IMO比其他大多数选择都要痛苦.