PostgreSQL里有两种特殊的字段类型,数组和JSON,这2个字段在处理一些数据类型时会非常方便。不用多建表还能方便的查询其中内容。
数据中的多对多,我们之前一般需要建一个映射表来处理;或者是在某方建一个比较长的字段(例如text类型)然后用某种分隔符(例如逗号)保存数据。
一对多如果在在「一」方保存「多」的信息,也只能类似多对多的处理方式。
有了数组类型,就可以直接建个数组字段保存这些值了,很简单的实现了一对多。
例如,我们创建一个表,产品表,每个产品可以有多张图片,图片用数组字段
12345
create table product( id serial primary key, name char(50) not null, imgs varchar(50) not null)
添加一条记录,有3张图p1.jpg, p2.jpg, p3.jpg
12
insert into product(name, imgs) values('手机', '{"p1.jpg", "p2.jpg", "p3.jpg"}');
查询imgs字段包含 p1.jpg 的记录
1
select * from product where 'p2.jpg' = ANY(imgs)
PostgreSQL 支持多维数组,而且是各种类型的数组、int[], timestamp[] 等等,不仅仅是字符串数组,多维数组形式例如: varchar(100)[][]
JSON字段用于保存更复杂的数据类型。
PostgreSQL中有2种JSON类型: json 和 jsonb ,两种类型的区别是:
根据这个特点,如果我们的JSON数据只是在程序中处理,可以选择json类型;如果需要PostgreSQL处理则选择jsonb更佳。
Postgresql 的官方文档做得非常好,更多信息看
PostgreSQL还有些其它很有意思的字段,例如:区间类型(日期区间、数值区间等)、复合类型、枚举类型、甚至点线多边形等几何图形等字段类型,而且对于这些类型都有相应的一些辅助运算函数的支持。 数据类型