添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
坚强的猴子  ·  PostgreSQL遍历Json_posgr ...·  1 月前    · 
伤情的火锅  ·  des加密 ...·  1 年前    · 
傻傻的瀑布  ·  关于SQL SERVER ...·  1 年前    · 
善良的拐杖  ·  Sharepoint2019 Unable ...·  1 年前    · 
虚心的排球  ·  Linux shell ...·  1 年前    · 

Postgresql支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型、用户自定义的类型、枚举类型以及组合类型。

一、数组类型的定义

在创建表时,字段类型后面加方括号 “[ ]” 即可定义数组数据类型,例如:

postgres=> create table test04(
             id int primary key,
             name_arr text[],
             len_arr int[]);
CREATE TABLE

以上text[]表示一堆text类型数组。int[]表示一堆int类型数组。

二、数组类型值输入

数组类型的插入有两种方式,第一种使用花括号方式:

postgres=> insert into test04 values (1,'{"bei","jing","shi"}','{3,4,3}');
INSERT 0 1
postgres=> select * from test04;
 id |    name_arr    | age_arr 
----+----------------+---------
  1 | {bei,jing,shi} | {3,4,3}
(1 row)

数组元素放在花括号中,一般用逗号隔开,对于字符类型值要用双引号引用,整个花括号元素用单引号引用。

第二用方式是用关键字 array,例如:

postgres=> insert into test04 values (2,array['Lu','zhi','shen'],array[2,3,4]);
INSERT 0 1
postgres=> select * from test04;
 id |    name_arr    | age_arr 
----+----------------+---------
  1 | {bei,jing,shi} | {3,4,3}
  2 | {Lu,zhi,shen}  | {2,3,4}
(2 rows)
三、查询数组元素

如果查询数组所有元素,那么直接查询字段值即可:

postgres=> select * from test04;
 id |    name_arr    | len_arr 
----+----------------+---------
  1 | {zhang,ya,hui} | {5,2,3}
  2 | {Lu,zhi,shen}  | {2,3,4}
(2 rows)

如果需要查询数组类型字段中某个位置的元素,可以通过方括号 “[]” 的方式,通过元素下标来查询,下标从1开始:

postgres=> select name_arr[2],len_arr[2] from test04;
 name_arr | len_arr 
----------+---------
 ya       |       2
 zhi      |       3
(2 rows)
四、数组元素的追加、删除、更新

1.追加,数组元素的桌架可通过使用函数array_append来进行:

postgres=> update test04 set name_arr=array_append(name_arr,'beizhu');
UPDATE 2
postgres=> select * from test04;
 id |       name_arr        | len_arr 
----+-----------------------+---------
  1 | {zhang,ya,hui,beizhu} | {5,2,3}
  2 | {Lu,zhi,shen,beizhu}  | {2,3,4}
(2 rows)
postgres=> update test04 set len_arr=array_append(len_arr,6);
UPDATE 2
postgres=> select * from test04;
 id |       name_arr        |  len_arr  
----+-----------------------+-----------
  1 | {zhang,ya,hui,beizhu} | {5,2,3,6}
  2 | {Lu,zhi,shen,beizhu}  | {2,3,4,6}
(2 rows)

函数array_append函数会在数组末尾段追加一个指定的元素。

2.删除,使用函数array_remove对数组类型的字段里元素进行删除:

postgres=> update test04 set name_arr = array_remove(name_arr,'beizhu') where id=1;
UPDATE 1
postgres=> select * from test04;
 id |       name_arr       |  len_arr  
----+----------------------+-----------
  2 | {Lu,zhi,shen,beizhu} | {2,3




    
,4,6}
  1 | {zhang,ya,hui}       | {5,2,3,6}
(2 rows)

函数array_remove通过指定元素进行删除。如果指定的值在数组中有多个,会全部删除符合的元素。

3.更新。数组中的元素想要修改可以通过指定要修改的元素的下标的方式修改:

postgres=> select * from test04 where id=2;
 id |       name_arr       |  len_arr  
----+----------------------+-----------
  2 | {Lu,zhi,shen,beizhu} | {2,3,4,6}
(2 rows)
postgres=> update test04 set name_arr[4]='ceshi' where id=2;
UPDATE 1
postgres=> select * from test04 where id=2;
 id |      name_arr       |  len_arr  
----+---------------------+-----------
  2 | {Lu,zhi,shen,ceshi} | {2,3,4,6}
(1 row)
五、数组操作符

数组的操作符如下:

操作符描述举例结果
=等于 。 两个数组值完全一样,顺序也必须一样select array[1,2,3]=array[1,2,3];t
<>不等于,两个数组不同,即便元素相同,但是位置不同也不相等select array[1,2,3]=array[1,3,2];f
<小于select array[1,2,3]<array[1,2,4]t
>大于select array[1,3,4]>array[1,2,4]t
<=小于等于select array[1,2,3]<=array[1,2,3];t
>=大于等于select array[1,2,3]》=array[1,2,3];t
@>包含,前者包含后者select array[1,2,3,4]@>array[1,4];t
<@被包含,后者包含前者select array[1,4]@>array[1,3,4,5];
&&重叠(具有公共元素)select array[1,3,5] && array[3,5]t
ll将数组与数组串接或者元素与数组串接select array[1,2,3]
六、数组函数

除了在数组插入、删除、更新中介绍的函数array_append、array_remove外,还有以下几种函数:

1.获取数组长度的函数array_length

postgres=> select array_length(array[1,3,4,5,6],1);
 array_length 
--------------
(1 row)

2.获取数组纬度的函数array_ndims

postgres=> select array_ndims(array[1,3,4,5,6]);
 array_ndims 
-------------
(1 row)
postgres=> select array_ndims(array[[1,3],[4,5]]);
 array_ndims 
-------------
(1 row)

3.获取指定元素在数组中第一次出现的位置的函数array_position

postgres=> select array_position(array['a','b','e','g','b'],'b');
 array_position 
----------------
(1 row)

4.替换数组元素的函数array_replace

postgres=> select array_replace(array['a','b','e','g','b'],'b','ss');
 array_replace 
---------------
 {a,ss,e,g,ss}
(1 row)

注意:替换操作会将所有符合的元素都替换成新元素。

5.将数据元素输出到字符串的函数array_to_string

xzxt=> select array_to_string(array['a','b','e','g','b'],',');
 array_to_string 
-----------------
 a,b,e,g,b
(1 row)
xzxt=> select array_to_string(array['a','b','e','g','b'],'|');
 array_to_string 
-----------------
 a|b|e|g|b
(1 row)

输出是指定元素之间的分隔符!!

另外还可以处理数组中的空元素,例如将数组[1,2,3,null.4]输出为字符串,以逗号隔开,空的元素设为数字0:

# 未处理null
xzxt=> select array_to_string(array[1,2,null,4],',');
 array_to_string 
-----------------
 1,2,4
(1 row)
# 将元素为null的替换成0
xzxt=> select array_to_string(array[1,2,null,4],',','0');
 array_to_string 
-----------------
 1,2,0,4
(1 row
 var pgarray = require('pg-array');
pgarray('node; ruby; rust', ';');
//=> '{node,ruby,rust}'
 var pgarray = require('pg-array');
pgarray(['node', 'ruby', 'rust']);
//=> '{node,ruby,rust}'
				
NumPy数值计算基础 NumPy是在1995年诞生的Python库Numeric的基础上建立起来的,但真正促使NumPy的发行的是Python的SciPy库。但SciPy中并没有合适的类似于Numeric中的对于基础数据对象处理的功能。于是,SciPy的开发者将SciPy中的一部分和Numeric的设计思想结合,在2005年发行了NumPy。 NumPy是Python的一种开源的数值计算扩展库。它包含很多功能,如创建n维数组(矩阵)、对数组进行函数运算、数值积分等。 NumPy的诞生弥补了这些缺陷,它提
开发的语言有数组的概念,对应于postgresql也有相关的数据字段类型数组是英文array的翻译,可以定义一维,二维甚至更多维度,数学上跟矩阵很类似。在postgres里面可以直接存储使用,某些场景下使用很方便,也很强大。 OS:CentOS 6.2 DB: PostgreSQL 9.2.41.数组的定义 不一样的维度元素长度定义在数据库中的实际存储都是一样的,数组元素的长度和类型必须要保持.
本文主要介绍下Postgresql的另外两种特殊的类型Range类型(范围类型)和数组类型。两种类型,适用于不同的场景,但是最终的目的相同,就是使用传统的数据类型,建立常规的索引无法满足查询的性能要求。而使用范围类型(通过使用gist索引)、使用数组类型(通过使用Gin索引)可以大幅度的加快特定场景下数据的查询速度。下面笔者就分别介绍下这两种数据类型的使用。 一、Range类型 1.1 Range类型的使用 在使用Range类型之前,我们先建立一些测试数据,用于Range类...
PostgreSQL数据库相关函数运用regexp_split_to_array 函数regexp_split_to_table 函数array_length 函数 regexp_split_to_array 函数 字符串分隔函数,可通过指定的表达式进行分隔,将字符串转换成数组。 搜索条件为多选,如选择a,c # regexp_split_to_array(字段名,分隔符) select regexp_split_to_array('a,b,c',','); regexp_split_to_table 函
HasArrayOf 警告:该宝石尚在开发中,尚未发布。 该插件使用PostgreSQL数组的功能实现了在Rails中进行has_and_belongs_to_many关联的替代方法。 在很多情况下,你只需要或的功能使用许多一对多与连接表是不必要的传统方法。 我们可以只存储id的整数数组。 它是如何工作的? 假设我们有一个包含许多视频的播放列表。 一个视频可以包含在许多播放列表中。 这是典型的多对多情况,但我们的实施方式有所不同。 # db/migrate/20141027125227_create_playlist.rb class CreatePlaylist < ActiveRecord :: Migration def change create_table :playlists do | t | t . integer :video_ids , a
postgresql支持数组类型,可以是基本类型,也可以是用户自定义的类型。日常中使用数组类型的机会不多,但还是可以了解一下。不像C或JAVA高级语言的数组下标从0开始,postgresql数组下标从1开始,既可以指定长度,也可以不指定长度。且postgresql既支持一维数组,也支持多维数组,但是平时二维数组也就够用了。 本文将给大家介绍PostgreSQL通过数组改进性能的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 PostgreSQL通过数组改进性能 创建一个用户和设备关系映射表,用户的设备ID存放在数组字段里面: CREATE TABLE devi - 编译时只组装expr出来记录ARRAY[1,2,3,4,5] - 在执行赋默认值时走执行器把expr变成value记录到datum中 - 执行时语义解析阶段就会把只拼出来:transformArrayExpr将ARRAY[1,2,3,4,5]转换为ArrayExpr - 执行时ExecEvalExpr阶段只当做Const把Value赋值给Datum即可。 - 如果是传入数组,直接当做常量赋值即可。
1.pgsql: 使用函数 regexp_split_to_table(text, text); 说明:第一个参数可以是字符串类型的常量或者变量(存储里用的较多)或者某张表的某个varchar类型的字段(一般也是存储里用),第二个参数是分隔符,以这个来分隔成多个结果。这个结果是只有一列的数据库表。 使用示例: select * from regexp_split_to_table('pgSql,sqlServer', ','); 2.sqlserver: 使用函数:dbo.f_split(
    PostgreSQL支持字段使用定长或可变长的一维或多维数组数组类型可以是内建类型,自定义类型,枚举类型以及组合类型。目前不支持区域类型。 create table test( id int, coll int[]     目前PostgreSQL中,声明数组长度数组维度是没有意义的,根据实际插入的数据确定。 2.插入数据      数组的输入使用...
- `timestamp`:存储日期和时间,带有时区信息。精度可以是毫秒,微秒或纳秒。 - `timestamptz`:与 `timestamp` 类似,但存储的是本地时间,并自动转换为 UTC 时间。 - `date`:存储日期,不包含时间和时区信息。 - `time`:存储时间,不包含日期和时区信息。精度可以是毫秒,微秒或纳秒。 - `interval`:存储时间间隔,可以表示两个时间点之间的差值。 你可以根据你的需要选择适当的时间数据类型