Postgres 的 Array 类型
mysql 不支持 Array 类型
一、Postgres 原生SQL
适用场景:可以用于实现贴标签
功能
1、定义
CREATE TABLE "Students"
(
name VARCHAR(255),
interest VARCHAR(255)[]
)
2、插入
(1) 方法一
INSERT INTO "Students"
VALUES
('colin',
'{"音乐", "电影", "读书"}'
)
注意1:双引号单引号这里不能混用:
'{"音乐", "电影", "读书"}'
注意2:插入后在数据库查看是
{音乐,电影,读书}
,而不是{'音乐','电影','读书'}
(2) 方法二 —— 数组构造函数
INSERT INTO "Students"
VALUES
('colin',
ARRAY['音乐', '电影', '读书']
)
注意:这里只能用单引号:
ARRAY['音乐', '电影', '读书']
3、访问
(1) 取一个
select interest[1] from "Students" where id = 1
注意:这里
interest[1]
不能用引号
return:
'音乐'
注:这里的数组索引值不是从 0 开始的
(2) 取多个
select interest[1:2] from "Students" where id = 1
return:
{音乐,电影}
(3) 取所有
select "interest" from "Students" where id = 1
return:
{音乐,电影,读书}
[拓展]
Postgres 引号 使用规律的总结:
不用引号
:内置函数、当键名是数组而取索引值时
单引号
:值、当键名是数组而取索引值时、json字段取value值("edu_experience"->'name')
双引号
:表名、键名、值里面嵌套的值
4、修改
update "Students" set interest[2] = '睡觉' where id = 1;
{音乐,睡觉,读书} => {音乐,睡觉,读书}
5、搜索
ANY()
select "interest" from "Students" where '睡觉' = ANY("interest");
return:
{音乐,睡觉,读书}
6、展开数组
unnest()
select unnest("interest") from "Students" where '睡觉' = ANY("interest");
return:
音乐
睡觉
读书
二、与 Sequelize 协作
Sequelize如何定义array类型?
interest: DataTypes.ARRAY(DataTypes.STRING),
原生的 Postgres 有两点:
1、数组的形式不是 [] 包裹而是 {}
2、数组的索引不是从 0 开始而是从 1 开始
3、[未知]用 navicat 查看 table design,本来 define 为 array 的 interest 字段显示的确是 varchar 类型
而用 Sequelize 很好的把这些差异给抹平了,你可以直接采用数组的方式去与数据库做交互操作
参考资料
1.[Postgres 指南-数组] http://postgresguide.com/cool/arrays.html
2.[PostgreSQL Array] http://www.postgresqltutorial.com/postgresql-array/
Postgres 的 Array 类型的更多相关文章
- JS高程5.引用类型(2)Array类型
Array类型: ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的. 创建数组的基本方式: (1)使用Array构造函数 var color=new Array(); ...
- 5.2 Array类型介绍
Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...
- JavaScript中Array类型方法总结
Array类型是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类型的数据.这里总结了数组类型的 ...
- Object类型与Array类型
总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...
- oracle Array类型作为参数传入函数(存储过程) 大字符串参数解决方案
1. 创建自定义的类型.由于Oracle没有提供现成的array类型,这里用table类型来模拟. CREATE OR REPLACE TYPE varchar_array is Table OF v ...
- mongo中查询Array类型的字段中元素个数
I have a MongoDB collection with documents in the following format: { "_id" : ObjectId(&qu ...
- 引用类型之Array类型
Array类型 ECMAScript数组与其它语言数组一样,都是数据的有序列表.但是ECMAScript数组的每一项可以保存任何类型的数据.而且,ECMAScript数组是可以动态调整的. 1.创建和 ...
- JavaScript引用类型之Array类型一
一.简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: 1.相同点: (1)他们都是数据的有序列 ...
- 如何判断一个变量是数组Array类型
在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...
随机推荐
- 【转】shell expect spawn、linux expect 用法小记 看着舒服点
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- springboot 配置DRUID数据源
druid 是阿里开源的数据库连接池. 开发时整合 druid 数据源过程. 1.修改pom.xml <dependency> <groupId>mysql</gro ...
- 二叉搜索树、AVL平衡二叉搜索树、红黑树、多路查找树
1.二叉搜索树 1.1定义 是一棵二叉树,每个节点一定大于等于其左子树中每一个节点,小于等于其右子树每一个节点 1.2插入节点 从根节点开始向下找到合适的位置插入成为叶子结点即可:在向下遍历时,如果要 ...
- Oracle数据库使用mybatis的时候,实体类日期为Date类型,mybatis里面定义的是Date类型,插入的时候,时分秒全部是12:00:00问题
实体类中日期定义的是Date类型的,没毛病: 我在mybatis里面定义的是Date类型的,进行测试的时候发现,数据库插入的日期的时分秒全部都是一样的,都是12:00:00,很郁闷: 后来把mybat ...
- mysql学习之路_字段类型与属性2
字段属性: 主键,唯一键,自增长. 主键: Primary key 主要的键,一张表只能有一个字段能使用对应的键,用来唯一约束该字段里面的数据不能重复,称之为主见. 一张表最多只有一个主键. 增加主键 ...
- BZOJ 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2321 Solved: 1187[Submit][Status ...
- Fastjson和Gson零碎总结
一:用于测试的类 User类 import lombok.Data; import lombok.experimental.Accessors; /** * @author silentdoer * ...
- Typecho 独立页面 添加自定义模板
1.首先在主题文件夹新建一个 ***.php 文件 编写代码 <?php /** * _主题命名 * * @package custom * */$this->need('header.p ...
- timeSetEvent
Header: Declared in Mmsystem.h; include Windows.h.Library: Use Winmm.lib. MSDN里定义的函数原型如下: MMRESULT t ...
- JAVA-部署-摘
一.下载 J2SDK下载http://java.sun.com/j2se/1.4.2/download.html 下载版本是j2sdk-1_4_2_08 ECLIPSE下载http://www.ec ...