【问题标题】:Postgresql return variable in type stored in a tablePostgresql以存储在表中的类型返回变量
【发布时间】:2017-04-26 16:27:34
【问题描述】:

我目前正在开发一个应用程序,但在尝试对使用自定义类型的表创建查询时遇到了问题。

这是一个示例表和类型,

CREATE TYPE address AS (
  street varchar(40),
  city   varchar(25),
  zip    varchar(5)
);
CREATE TABLE houses (
  id SERIAL PRIMARY KEY,
  address address
);

我需要检索一个列表,其中包含存储在表格房屋中的所有城市。 这是我尝试做的:

SELECT address.city
FROM houses
GROUP BY address.city

它将 address.city 检测为表。有什么方法可以在 PostgreSQL 中做我想做的事吗?

【问题讨论】:

    标签: postgresql types composite-types


    【解决方案1】:

    我不会在表格中使用这样的复合类型。但是你仍然可以这样做,使用括号。

    SELECT (address).city
    FROM houses
    GROUP BY (address).city
    

    来自the docs

    要访问复合列的字段,需要写入一个点和字段名称,就像从表名称中选择一个字段一样。 事实上,这非常类似于从表名中进行选择,您经常必须使用括号来避免混淆解析器。

    相反,我会使用jsonb。或者,如果您要使用复合类型,则应使用 PostGIS 中的 stdaddr

    【讨论】:

    • 我不建议用 json 代替规范化。
    • 无论哪种方式都没有标准化。
    • 我很好奇为什么 jsonb 比复合类型更受欢迎。是否有性能方面的考虑?
    • @HaleemurAli 有几个,他们双向切割。自定义类型没有要点索引。该练习留给实施者,因此您仅限于 btree 或手动索引子类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2016-02-06
    • 2017-01-07
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多