postgresql 数组类型

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

 --pg支持数组,且支持分片访问,比如[1:2],任意只有一个数字(没有冒号)的维数是从 1 开始到声明的数字为止的
 --如果任意维数被写为一个片段,也就是,包含一个冒号,那么所有维数都被当做是片段
If any dimension is written as a slice, i.e., contains a colon, then all dimensions are treated as slices. 
Any dimension that has only a single number (no colon) is treated as being from 1 to the number specified. 
For example, [2] is treated as [1:2], as in this example:

SELECT schedule[1:2][2] FROM sal_emp WHERE name = 'Bill';

--任何数组的当前维数都可以用 array_dims 函数检索:
SELECT array_dims(schedule) FROM sal_emp WHERE name = 'Carol';
array_dims
------------
[1:2][1:2]

--也可以用 array_upper 和 array_lower 函数分别返回数组特定维的上界和下界:
SELECT array_upper(schedule, 1) FROM sal_emp WHERE name = 'Carol'


--如果数组本身或任何下标表达式是 NULL ,那么该数组的下标表达式也将生NULL 。 从一个数组的当前范围之外抓取数据将生成一个 NULL ,而不是导致错误 


--array_length可用于返回指定维数的长充
SELECT array_length(schedule, 1) FROM sal_emp WHERE name = 'Carol';
array_length
--------------
2

--cardinality 返回任意维数的元素个数
--cardinality returns the total number of elements in an array across all dimensions. It is effectively the number of rows a call to unnest would yield:
SELECT cardinality(schedule) FROM sal_emp WHERE name = 'Carol';
cardinality
-------------
4

--更新指定索引的数组值
UPDATE sal_emp SET pay_by_quarter[4] = 15000 WHERE name = 'Bill';
--更新指定分片的数组值
UPDATE sal_emp SET pay_by_quarter[1:2] = '{27000,27000}' WHERE name = 'Carol';


--可以通过给一个尚不存在数组元素赋值的办法扩大数组, 所有位于原数组最后一个元素和这个新元素之间的未赋值元素都将设为 NULL 。 
--例如,如果 myarray数组当前有 4 个元素, 在对 myarray[6]赋值之后它将拥有 6 个元素,其中myarray[5] 的值将为 NULL

--检索数组中是否包含任一元素,或者包含所有的元素
SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter);
SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);

--检索数组包含元素的索引,注意第一个函数匹配第一次满足条件的,第二个函数匹配所有的满足条件的
SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon'),array_positions(ARRAY[1, 4, 3, 1, 3, 4, 2, 1], 1);
 array_position | array_positions 
----------------+-----------------
              2 | {1,4,8}
              
              
              

--数组运算中的一些比较符
运算符                  描述
a = b                   立方体a和b是相同的
a && b                  立方体a和b重叠
a @> b                  立方体a包含立方体b
a <@ b                  立方体a被包含在立方体b中
[a, b] < [c, d]         小于
[a, b] > [c, d]         大于

postgres=# select array[1,2,3],array[2,3,4];
  array  |  array  
---------+---------
 {1,2,3} | {2,3,4}
--两个群组中是否有重叠 
postgres=# select array[1,2,3]&&array[2,3,4];
 ?column? 
----------
 t
--第一个数组是否包含第二个数组
postgres=# select array[1,2,3]@>array[2,3,4];
 ?column? 
----------
 f
 
postgres=# select array[1,2,3]@>array[2,3];  
 ?column? 
----------
 t
--第一个数组是否被第二个数组包含 
postgres=# select array[1,2,3]<@array[2,3];
 ?column? 
----------
 f
 
postgres=# select array[1,2,3]<@array[1,2,3,4];
 ?column? 
----------
 t
(1 row)
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 Go PostgreSQL
golang pgx自定义PostgreSQL类型
golang的pgx驱动提供了大约70种PostgreSQL类型支持,但还是有一些类型没有涵盖,本文介绍如何自己编写代码支持特殊的类型。
|
7月前
|
SQL 关系型数据库 数据库
实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在使用 DataWorks 数据集成同步 PostgreSQL 数据库中的 Geometry 类型数据如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
91 0
|
7月前
|
分布式计算 关系型数据库 大数据
MaxCompute产品使用合集之怎么才可以将 PostgreSQL 中的 geometry 空间类型字段同步到 MaxCompute 或另一个 PostgreSQL 数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
JSON Java 关系型数据库
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
325 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 数组类型
PostgreSQL 数组类型
150 0
|
存储 关系型数据库 PostgreSQL
PostgreSQL 布尔类型
PostgreSQL 布尔类型
342 0
|
存储 关系型数据库 PostgreSQL
PostgreSQL 二进制类型
PostgreSQL 二进制类型
352 0
|
存储 SQL 关系型数据库
PostgreSQL 字符串类型
PostgreSQL 字符串类型
265 0
|
关系型数据库 PostgreSQL
PostgreSQL 任意精度类型
PostgreSQL 任意精度类型
325 0