为什么planet_osm_waystable中tags列的数据类型不是JSON格式?

Why the data type of tags column in planet_osm_ways table is not in JSON format?

我一直在处理 OSM 数据,我使用 osm2pgsql. This generated few tables in my postgre database, which contains a table planet_osm_ways. The planet osm can be studied here 将其导入到我的 postgresql 数据库中。 planet_osm_ways 具有以下数据示例:

问题: 上面 table 中的标签栏不是 JSON 格式。将此数据设为 JSON 格式不是很有用吗?

我相信它在访问标签时会非常有用,比如如果数据是JSON格式,"name"键的内容可以很容易地访问。在当前状态下,除了解析每个标签列实例中的所有标签外,没有其他解决方案。

期待有趣的建议,并了解是否有任何特殊原因不将标签数据保留为 JSON 格式。非常感谢您的宝贵时间。

osm2psql 使用了 "near to JSON" 旧格式...您可以使用一些 "rarely used tags"(如 this wiki considerations), that osm2pgsql converts to hstore, and you can convert to JSON using hstore_to_json in PostgreSQL 9.5

对于其他更相关的数据,您引用了 "tags column"... 如 Osm2pgsql/schema

所定义
  • planet_osm_nodes.tags
  • planet_osm_rels.tags
  • planet_osm_ways.tags

它们是 text[] 数据类型(字符串数组),表示 "tags and values",格式为:{tag1, value1, tag2, value2, ...}...所以,json_object()转换成JSON(或jsonb_object转换成JSONB)的格式。


注意事项

为什么它不使用 PostGreSQL JSON(B) 列类型?我不是 osm2pgsql 的作者,但很容易理解作者的决定。

软件osm2pgsql是2006年的项目,time of the PostregSQL 7... Se the time-line of the osm2pgsql development

不稳定的 JSON 支持到达 PostgreSQL v9.2 (2012-09),并作为一个真正的完成现在(!)在 2016 年提供 PostgreSQL v9.5JSONB 内部格式的专业支持。

因此,我们看到了基本原因:

  1. 好的和可靠的开源软件(如 PostgreSQL 和 osm2psql)需要时间,进化缓慢。

  2. Professional JSON 是 PostgreSQL 社区的 "new"。


我也对 OSM JSON-modeled 感兴趣,但它不是那么简单,是一个新的数据模型...所以,让我们来看看 the developpers answer here.