📅  最后修改于: 2023-12-03 15:18:39.400000             🧑  作者: Mango
PostgreSQL 是一个开源的对象关系型数据库管理系统 (ORDBMS),被广泛使用于各种企业应用程序和数据分析应用中。它的 SQL 支持包含许多强大而且越来越普遍使用的扩展和特性。
CTE 是 SQL 中一种非常有用的技术,它可以让你定义一个可重用的临时表,这个表可以被查询和操作,但它并不存储在数据库中。PostgreSQL 从 8.4 版本开始支持 CTE。以下代码演示了一个使用 CTE 的查询:
WITH recursive cte (n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM cte WHERE n < 10
)
SELECT n FROM cte;
这个查询用递归方式生成了一个序列:1, 2,...,10。
PostgreSQL 支持 ARRAY 类型,它可以在单个数据库列中存储多个值。它的操作类似于其他 SQL 数据类型,但它还支持一些非常有用的数组函数。以下是一些例子:
-- 创建一个数组
SELECT ARRAY[1, 2, 3];
-- 将数组的元素展开
SELECT unnest(ARRAY[1, 2, 3]);
-- 将数组中的值作为行返回
SELECT * FROM unnest(ARRAY[1, 2, 3]) AS x;
PostgreSQL 支持 JSON 数据类型,可以存储和操作 JSON 格式的数据。它提供了许多函数来操作 JSON 数据,例如 json_agg 和 json_build_object。
以下是一些例子:
-- 创建一个 JSONB 列
CREATE TABLE people (data jsonb);
-- 插入 JSONB 数据
INSERT INTO people (data)
VALUES ('{ "name": "Alice", "age": 23 }');
-- 查询 JSONB 数据中的某个字段
SELECT data->>'name' FROM people;
-- 将查询结果转为 JSON 格式
SELECT json_agg(data) FROM people;
PostgreSQL 支持全文搜索功能,它允许你在文本或文档中搜索非结构化数据。它提供了一系列的内置函数,可以处理自然语言查询,如 to_tsvector 和 to_tsquery。
以下是一个例子:
-- 创建全文搜索索引
CREATE INDEX document_fulltext ON documents USING GIN(to_tsvector('english', body));
-- 查询包含关键字的文档
SELECT title
FROM documents
WHERE to_tsvector('english', body) @@ to_tsquery('english', 'search AND text');