一、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 引号 使用规律的总结:
不用引号
:内置函数、当键名是数组而取索引值时单引号
:值、当键名是数组而取索引值时双引号
:表名、键名、值里面嵌套的值
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.html2.[PostgreSQL Array] http://www.postgresqltutorial.com/postgresql-array/
联系人:
手 机:13633670136
邮 箱:4ej9ofl6yh@qq.com
公 司:esball登录
地 址:林芝市林芝地区八一大道55号