📜  postgresql 遗产 - SQL (1)

📅  最后修改于: 2023-12-03 15:18:39.400000             🧑  作者: Mango

PostgreSQL 遗产 - SQL

PostgreSQL 是一个开源的对象关系型数据库管理系统 (ORDBMS),被广泛使用于各种企业应用程序和数据分析应用中。它的 SQL 支持包含许多强大而且越来越普遍使用的扩展和特性。

常见的 PostgreSQL SQL 特性
CTE (Common Table Expression)

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。

ARRAY 类型

PostgreSQL 支持 ARRAY 类型,它可以在单个数据库列中存储多个值。它的操作类似于其他 SQL 数据类型,但它还支持一些非常有用的数组函数。以下是一些例子:

 -- 创建一个数组
 SELECT ARRAY[1, 2, 3];

 -- 将数组的元素展开
 SELECT unnest(ARRAY[1, 2, 3]);

 -- 将数组中的值作为行返回
 SELECT * FROM unnest(ARRAY[1, 2, 3]) AS x;
JSON 类型

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;
FULL TEXT 搜索

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');
参考资料