JSONb日期:内部实际日期



我正在使用postgresqljdbc适配器将一堆数据迁移到jsonb字段中(postgres9.4)

导入后,日期字段看起来正确,但显示时用双引号括起来。有没有办法判断它们是否真的作为日期值存储在内部?如果它们是字符串,我认为范围查找不会很有效。

例如,propertiesjsonb字段中的一个条目如下所示:

"founded_on": "Sep 1, 2012 12:00:00 AM",

我现在可以在上搜索了

SELECT CAST(properties->>'founded_on' AS DATE

SELECT extract('year' from cast(properties->>'founded_on' as timestamp))

两者都很好,但不要告诉我Postgres是否每次都在将jsonb字段中的字符串值作为日期进行重新准备。

我可以创建一个索引,将这些值转换为日期,并使用它进行搜索,但这似乎有些不雅。我真的很想知道存储的值是一个日期。整数和浮点似乎是它们的实际本机值,而不是字符串,如以下所示:

shares_sold": 5900000,

"latitude": 33.561467,

非常感谢任何反馈。

JSON没有"日期"类型。JSONB类型(在第9.4页中添加)映射,但没有在JSON基元类型上扩展。看到的值就是文本。

虽然可以在字符串属性上添加索引,但当前的"英文散文"格式将无法参与范围查询,因为这些值在日期上没有很好的顺序。

根据原始类型的限制,存储有序日期的不同方式。

  • 具体的ISO 8601变化(具有相同的时区);文本

  • UNIX时间或"JavaScript时间"(以毫秒为单位);整数

  • 儒略日(见"J"日期格式);数字

(即使范围不能匹配,也可以使用相等索引探针。只要值完全匹配,这仍然需要使用一致的数据表示。)

在(JSONB/GIN)索引上应用范围查询时,将DATE值转换为用于"日期"属性的适当JSON数据类型(映射到Pg中的整数、数字、文本);而不是相反。

获取值时,将所选格式转换为DATE-这是"可以的",因为这是在范围查询之后完成的,并且是"必需的",原因是JSONB本机不支持日期或时间。

相关内容

  • 没有找到相关文章

最新更新