目录

pgsql-18 数组与范围类型

18 - 数组与范围类型

1. 📖 概述

PostgreSQL原生支持数组和范围类型,这是其独特优势。

2. 📊 数组类型

-- 创建数组列
CREATE TABLE articles (
    id SERIAL PRIMARY KEY,
    title TEXT,
    tags TEXT[],
    ratings INTEGER[]
);

-- 插入数组
INSERT INTO articles (title, tags, ratings) VALUES
    ('PostgreSQL Tutorial', ARRAY['database', 'postgresql'], ARRAY[5, 4, 5]),
    ('SQL Guide', '{"sql", "tutorial"}', '{4, 5, 4}');

-- 数组操作
SELECT tags[1] FROM articles;  -- 第一个元素
SELECT tags[1:2] FROM articles;  -- 切片
SELECT array_length(tags, 1) FROM articles;  -- 长度
SELECT 'database' = ANY(tags) FROM articles;  -- 包含判断

-- 数组聚合
SELECT array_agg(tag) FROM unnest(ARRAY['a', 'b', 'c']) AS tag;

3. 📏 范围类型

-- 日期范围
CREATE TABLE room_bookings (
    id SERIAL PRIMARY KEY,
    room_id INTEGER,
    booking_period DATERANGE
);

INSERT INTO room_bookings (room_id, booking_period) VALUES
    (101, '[2024-01-15, 2024-01-20)');

-- 范围查询
SELECT * FROM room_bookings
WHERE booking_period @> DATE '2024-01-17';  -- 包含某日期

SELECT * FROM room_bookings
WHERE booking_period && '[2024-01-16, 2024-01-19)'::daterange;  -- 重叠

4. 📚 下一步

学习PostGIS地理数据