JSONb 日期:内部实际日期?
JSONb dates: actual dates internally?
我正在使用 postgresql jdbc 适配器将一堆数据迁移到 jsonb 字段(postgres 9.4)。
导入后,日期字段看起来正确,但显示时用双引号括起来。有没有办法判断它们是否实际上在内部存储为日期值?如果它们是字符串,我认为范围查找不会非常有效。
例如,properties
jsonb 字段中的条目如下所示:
"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 没有 "date" 类型。 JSONB型(加在Pg 9.4) maps but does not extend upon JSON primitive types.看到的值就是这个,text.
虽然可以在字符串属性上添加索引,但当前的 "English prose" 格式将无法参与 范围查询 ,因为此类值的排序不正确日期。
考虑到原始类型限制,存储有序日期的不同方式。
特定 ISO 8601 variation(具有相同的时区);文字
UNIX time 或 "JavaScript time" 带毫秒;整数
Julian Day (see the 'J' date format);数值
(即使范围不能..也可以使用相等索引探测,前提是值完全匹配,这仍然需要使用一致的数据表示。)
在 (JSONB / GIN) 索引上应用范围查询时,将 DATE 值转换为适当的 JSON 数据类型(映射到 Pg 中的整数、数字、文本)用于"date" 属性;不是相反。
获取值时将所选格式转换为 DATE - 它是 'okay' 因为这是 在 范围查询之后完成的 'required' 因为 JSONB 本身不支持日期或时间。
我正在使用 postgresql jdbc 适配器将一堆数据迁移到 jsonb 字段(postgres 9.4)。
导入后,日期字段看起来正确,但显示时用双引号括起来。有没有办法判断它们是否实际上在内部存储为日期值?如果它们是字符串,我认为范围查找不会非常有效。
例如,properties
jsonb 字段中的条目如下所示:
"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 没有 "date" 类型。 JSONB型(加在Pg 9.4) maps but does not extend upon JSON primitive types.看到的值就是这个,text.
虽然可以在字符串属性上添加索引,但当前的 "English prose" 格式将无法参与 范围查询 ,因为此类值的排序不正确日期。
考虑到原始类型限制,存储有序日期的不同方式。
特定 ISO 8601 variation(具有相同的时区);文字
UNIX time 或 "JavaScript time" 带毫秒;整数
Julian Day (see the 'J' date format);数值
(即使范围不能..也可以使用相等索引探测,前提是值完全匹配,这仍然需要使用一致的数据表示。)
在 (JSONB / GIN) 索引上应用范围查询时,将 DATE 值转换为适当的 JSON 数据类型(映射到 Pg 中的整数、数字、文本)用于"date" 属性;不是相反。
获取值时将所选格式转换为 DATE - 它是 'okay' 因为这是 在 范围查询之后完成的 'required' 因为 JSONB 本身不支持日期或时间。