【问题标题】:How to store arrays of points (X,Y, color) inside Postgres array如何在 Postgres 数组中存储点数组(X,Y,颜色)
【发布时间】:2019-06-11 23:30:54
【问题描述】:

如何在 Postgres 中存储外部数据流中每条记录具有以下结构的数据: (时间戳, [(x1,y1, color1), (x2,y2, color2), ...]) ?

点数因记录而异。

我尝试使用 PostGIS:

    CREATE TABLE AllPoints(
        id serial,
        time  timestamp with time zone,
        points geometry(POINT)[]
    );

但我无法弄清楚如何在 PostGIS POINT 对象中捕获“颜色”属性(每个点都存在)。

我考虑的另一个选项是:将颜色为 JSON 的点数组存储在 JSONB 列中,但在这种情况下,我会丢失 PostGIS SQL 函数(例如,查找指定区域中的所有点)。

【问题讨论】:

  • 如果你正确地对其进行规范化(即不使用数组),就像在包含点的表中添加一个新列一样简单
  • 点数不固定;对于不同的时间戳,我们期望不同的点数,这就是我使用数组的原因。
  • 一个表的行数也不是固定的。你在这里确实有一个经典的一对多关系。
  • 如果颜色可以是double precision,则可以在PostGIS中将其存储为“M维度”。
  • 如果我理解正确,_a_horse_with_no_name 建议有 2 个表:T1(id,timestamp)和 T2(t1_id,POINT,color),其中 t1_id 是 T1(id)的 FK。对我来说看起来不错,我今天会试试看。

标签: postgresql postgis


【解决方案1】:

_a_horse_with_no_name 的建议对我有用。

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多