PostgreSQL中如何从自定义类型内的数组查询指定数据?
如何查询PostgreSQL复合类型中的字段及数组元素?
针对你创建的复合类型sample和表tc_sampling,以下是正确的查询方法:
1. 查询复合类型中的timestamp字段
PostgreSQL访问复合类型字段时,需要给复合字段加括号,再通过点号访问内部字段(避免和表字段的优先级冲突),示例:
SELECT equip_id, (tc_sample).ts FROM tc_sampling LIMIT 10;
也可以使用箭头操作符->(返回原始类型)或->>(返回文本类型):
SELECT equip_id, tc_sample->'ts' AS sampling_time FROM tc_sampling LIMIT 10;
2. 查询temperature数组中的指定元素
先通过复合类型拿到数组字段,再用数组下标访问(PostgreSQL数组默认从1开始计数),比如取数组第3个元素:
SELECT equip_id, (tc_sample).temperature[3] AS third_temperature FROM tc_sampling WHERE equip_id=10;
如果要一次性查询多个字段和数组元素,示例:
SELECT equip_id, (tc_sample).ts AS sampling_time, (tc_sample).temperature[1] AS first_temp, (tc_sample).temperature[5] AS fifth_temp FROM tc_sampling;
你之前的错误原因
- 第一种查询
SELECT equip_id,tc_sample[1]FROM tc_sampling limit 10;:tc_sample是复合类型而非数组,不支持下标操作,下标仅适用于数组类型。 - 第二种查询
SELECT (ARRAY[tc_sample])[1:1] FROM tc_sampling WHERE equip_id=10 LIMIT 3:只是将复合类型包装成了数组,并没有访问复合类型内部的字段,因此返回的还是完整的复合类型数据。
内容的提问来源于stack exchange,提问作者Yitzchak Handel
相关产品推荐
相关产品推荐

