PostgreSQL作为功能强大的开源关系型数据库,其灵活的存储结构定义能力能够满足各类复杂业务需求。本文将系统介绍PostgreSQL的核心存储结构,包括表、索引、函数、存储过程和触发器,并附上实用代码示例,助你快速掌握数据库开发要点。
- 数据表(Table)设计
数据表是数据库的基础存储单元,良好的表结构设计至关重要。
CREATE TABLE IF NOT EXISTS employees (
employee_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
salary NUMERIC(10,2) CHECK (salary > 0),
department_id INT,
CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES departments(id)
);
- SERIAL类型实现自增主键
- CHECK约束确保薪资数据有效性
- 外键约束维护数据关联完整性
- 索引(Index)优化
合理使用索引可显著提升查询性能。
CREATE UNIQUE INDEX IF NOT EXISTS idx_employees_name ON employees(name);
- 唯一索引防止重复数据
- 加速数据检索过程
- 视图(View)应用
视图简化复杂查询,提供数据访问抽象层。
CREATE OR REPLACE VIEW high_salary_employees AS
SELECT employee_id, name, salary
FROM employees
WHERE salary > 100000;
- 封装复杂查询逻辑
- 便于权限管理和代码复用
- 函数(Function)开发
函数实现业务逻辑封装,提高代码复用性。
CREATE OR REPLACE FUNCTION add_numbers(a INT, b INT) RETURNS INT
LANGUAGE plpgsql
AS $$
BEGIN
RETURN a + b;
END;
$$;
- 支持多种语言编写
- PL/pgSQL是内置过程语言
- 存储过程(Procedure)实现
存储过程处理复杂业务逻辑,支持事务控制。
CREATE OR REPLACE PROCEDURE raise_notice_example()
LANGUAGE plpgsql
AS $$
BEGIN
RAISE NOTICE 'This is a notice from stored procedure!';
END;
$$;
-- 调用示例
CALL raise_notice_example();
- 适用于批量数据处理
- 通过OUT参数返回结果
- 触发器(Trigger)配置
触发器实现数据变更时的自动处理逻辑。
-- 创建触发函数
CREATE OR REPLACE FUNCTION log_employee_update() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
RAISE NOTICE 'Employee % is updated', NEW.employee_id;
RETURN NEW;
END;
$$;
-- 创建触发器
CREATE TRIGGER employee_update_trigger
AFTER UPDATE ON employees
FOR EACH ROW
EXECUTE FUNCTION log_employee_update();
- 自动记录数据变更
- 实现数据校验逻辑
- 自定义类型(Type)定义
复合类型支持复杂数据结构建模。
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'full_name') THEN
CREATE TYPE full_name AS (
first_name VARCHAR,
last_name VARCHAR
);
END IF;
END
$$;
- 避免类型重复创建
- 支持作为表字段或函数参数
总结
本文全面介绍了PostgreSQL的核心存储结构,包括表设计、索引优化、视图应用、函数开发、存储过程实现、触发器配置和自定义类型定义。掌握这些知识将显著提升你的数据库开发能力。
欢迎点赞收藏,持续关注更多PostgreSQL实战内容!
如有任何问题或建议,欢迎在评论区交流讨论。
附录:运行环境
- PostgreSQL版本:13+
- 推荐工具:psql、PgAdmin、DataGrip
1498

被折叠的 条评论
为什么被折叠?



