PostgresのArrayタイプ

2589 ワード

mysqlはArrayタイプをサポートしていません
一、Postgres原生SQL
適用シーン: 機能の実装に使用可能
1、定義
CREATE TABLE "Students"
(
   name VARCHAR(255),
   interest VARCHAR(255)[]
)

2、挿入
(1)方法一
INSERT INTO "Students"
VALUES
('colin',
'{"  ", "  ", "  "}'
)

注意1:二重引用符一重引用符ここでは混用できません:'{" ", " ", " "}'注2:挿入後のデータベース表示は{ , , }であり、{' ',' ',' '}ではありません.
(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には2つの点があります.
1、配列の形式は[]ラップではなく{}
2、配列のインデックスは0からではなく1から
3、[未知]table designをnavicatで表示し、本来defineがarrayのinterestフィールドに表示されるのはvarcharタイプである
Sequelizeでこれらの違いをよく消して、配列の方法でデータベースとインタラクティブに操作することができます.
参考資料
1.[postgresガイド-配列]http://postgresguide.com/cool/arrays.html 2.[PostgreSQL Array] http://www.postgresqltutorial.com/postgresql-array/