postgresql - JSONb 日期 : actual dates internally?

标签 postgresql date jsonb

我正在使用 postgresql jdbc 适配器将一堆数据迁移到 jsonb 字段(postgres 9.4)。

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

例如,properties jsonb 字段中的条目如下所示:

"founded_on": "2012 年 9 月 1 日 12:00:00 AM",

我现在可以搜索,比如说,

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

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

两者都工作正常,但不要告诉我 Postgres 是否每次都将 jsonb 字段中的字符串值重新解析为日期。

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

shares_sold": 5900000,

“纬度”:33.561467,

非常感谢任何反馈。

最佳答案

JSON 没有“日期”类型。 JSONB 类型(添加到 Pg 9.4 中)映射到 does not extend upon JSON primitive types.看到的值就是文本。

虽然可以在字符串属性上添加索引,但当前的“英语散文”格式将无法参与范围查询,因为此类值在日期上的排序不正确。

在给定原始类型限制的情况下,存储有序日期的不同方法。

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

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

获取值时将所选格式转换为 DATE - 这是“好的”,因为这是在范围查询之后完成的,并且“必需”,因为 JSONB 本身不支持日期或时间。 p>

关于postgresql - JSONb 日期 : actual dates internally?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29269037/

相关文章:

Django - 如何设置两个具有相同字段的模型?

javascript - 为什么 JavaScript getTime() 不是一个函数?

java - 从日期中提取日期

postgresql - postgres的密码

java - 无法从 Spring Boot 连接到 postgresql 架构 - 'org.postgresql.util.PLSQLException: ERROR: schema "测试“不存在”

ios - 按键中的字符串日期对 NSDictionaries 的 NSArray 进行排序?

postgresql - PGSQL JSONB 中带有部分路径的深度 JSON 查询?

ruby-on-rails - Rails PostgreSQL jsonb GROUP BY 对内部动态键的查询

arrays - 使用 Postgres JSONB 查询查询数组中的数组

sql - 将 1000 个 ID 填充到 SELECT ... WHERE ... IN (...) Postgres 查询中是否合理?