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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM