Postgres 的 Array 类型
Postgres 的 Array 类型| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |
| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 14296601| Postgres 的 Array 类型| 2021-01-19T10:31:00| | BlogPost|
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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现