PostgreSQL

关注公众号 jb51net

关闭
首页 > 数据库 > PostgreSQL > PostgreSQL从入门到精通

PostgreSQL数据库从入门到精通实战

作者:索荣荣

这是一份详细的PostgreSQL数据库使用指南,涵盖了核心概念、安装、基本操作、高级功能、管理与维护、安全、复制与高可用等多个方面,帮助用户从入门到精通PostgreSQL数据库,这份指南提供了 PostgreSQL的全面概览和核心实践,感兴趣的朋友跟随小编一起看看吧

这是一份详细的 PostgreSQL 数据库使用指南,涵盖核心概念、操作、管理和优化实践。

1. 介绍与安装

1.1 什么是 PostgreSQL?

PostgreSQL 是一个功能强大、开源的对象关系型数据库管理系统 (ORDBMS)。它以其高度的 SQL 标准兼容性、强大的功能集(如 JSON 支持、地理空间数据处理、全文搜索)、可扩展性(通过扩展)以及可靠性(ACID 事务支持)而闻名。

1.2 安装 PostgreSQL

2. 基本概念与操作

2.1 连接数据库

2.2 创建数据库

CREATE DATABASE mydatabase;
-- 指定所有者
CREATE DATABASE mydatabase OWNER myuser;
-- 指定编码 (推荐 UTF8)
CREATE DATABASE mydatabase ENCODING 'UTF8';

2.3 创建用户/角色

在 PostgreSQL 中,"角色"(Role)可以代表用户(User)或用户组(Group)。

-- 创建登录角色 (用户)
CREATE ROLE myuser WITH LOGIN PASSWORD 'mypassword';
-- 创建超级用户
CREATE ROLE adminuser WITH LOGIN PASSWORD 'adminpass' SUPERUSER;
-- 修改密码
ALTER ROLE myuser WITH PASSWORD 'newpassword';

2.4 创建表

CREATE TABLE employees (
    id SERIAL PRIMARY KEY, -- SERIAL 通常用于自动递增主键
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    hire_date DATE NOT NULL,
    salary NUMERIC(10, 2) CHECK (salary > 0),
    department_id INTEGER REFERENCES departments(id) -- 外键约束
);

常见数据类型:

2.5 CRUD 操作 (创建、读取、更新、删除)

插入数据 (Create):

INSERT INTO employees (first_name, last_name, email, hire_date, salary, department_id)
VALUES ('John', 'Doe', 'john.doe@example.com', '2023-01-15', 60000.00, 1);
-- 插入多条
INSERT INTO employees (...) VALUES (...), (...), (...);

查询数据 (Read):

-- 基本查询
SELECT * FROM employees;
-- 选择特定列
SELECT first_name, last_name, salary FROM employees;
-- 条件过滤 (WHERE)
SELECT * FROM employees WHERE salary > 50000;
SELECT * FROM employees WHERE hire_date BETWEEN '2022-01-01' AND '2023-12-31';
SELECT * FROM employees WHERE last_name LIKE 'Sm%'; -- 模糊匹配
-- 排序 (ORDER BY)
SELECT * FROM employees ORDER BY salary DESC;
-- 限制结果集 (LIMIT, OFFSET)
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 10 OFFSET 20; -- 分页
-- 聚合函数 (COUNT, SUM, AVG, MIN, MAX)
SELECT COUNT(*) FROM employees;
SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id;
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; -- HAVING 过滤分组
-- 连接查询 (JOIN)
SELECT e.first_name, e.last_name, d.name AS department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
-- 子查询
SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);

更新数据 (Update):

UPDATE employees SET salary = salary * 1.05 WHERE department_id = 3; -- 给部门3的员工涨薪5%
UPDATE employees SET email = 'new.email@example.com' WHERE id = 42;

删除数据 (Delete):

DELETE FROM employees WHERE id = 100; -- 删除特定行
DELETE FROM employees; -- 删除所有行 (危险!通常用 TRUNCATE 更快)
TRUNCATE TABLE employees; -- 快速清空表,重置序列 (如果有),但无法触发 DELETE 触发器
TRUNCATE TABLE employees RESTART IDENTITY; -- 同时重置关联的序列

3. 高级功能

3.1 索引

索引是加速查询的关键。

3.2 事务 (Transactions)

PostgreSQL 使用 MVCC (多版本并发控制) 来管理并发访问。

3.3 视图 (Views)

视图是基于一个或多个表的查询结果的虚拟表。

-- 创建视图
CREATE VIEW employee_summary AS
SELECT e.id, e.first_name, e.last_name, d.name AS department, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.id;
-- 查询视图
SELECT * FROM employee_summary WHERE department = 'Engineering';
-- 更新视图 (有限制条件,需满足特定规则)
CREATE OR REPLACE VIEW ... -- 修改视图定义
DROP VIEW employee_summary; -- 删除视图

3.4 存储过程与函数 (PL/pgSQL)

PostgreSQL 支持多种过程语言,最常用的是 PL/pgSQL。

-- 简单函数示例
CREATE OR REPLACE FUNCTION get_employee_count(dept_id INTEGER)
RETURNS INTEGER AS $$
DECLARE
    emp_count INTEGER;
BEGIN
    SELECT COUNT(*) INTO emp_count
    FROM employees
    WHERE department_id = dept_id;
    RETURN emp_count;
END;
$$ LANGUAGE plpgsql;
-- 调用函数
SELECT get_employee_count(1);

3.5 触发器 (Triggers)

触发器在特定事件(INSERT, UPDATE, DELETE)发生时自动执行一个函数。

-- 创建触发器函数 (记录员工薪资变更)
CREATE OR REPLACE FUNCTION log_salary_change()
RETURNS TRIGGER AS $$
BEGIN
    IF NEW.salary <> OLD.salary THEN
        INSERT INTO salary_history (employee_id, old_salary, new_salary, change_time)
        VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 创建触发器
CREATE TRIGGER track_salary_change
AFTER UPDATE OF salary ON employees -- 仅当 salary 列更新时触发
FOR EACH ROW
EXECUTE FUNCTION log_salary_change();

3.6 扩展 (Extensions)

PostgreSQL 的功能可以通过扩展来增强。

4. 管理与维护

4.1 配置 (postgresql.conf)

主要配置文件,控制数据库行为(内存、连接、日志、复制等)。位置通常在数据目录下。

4.2 用户与权限管理

4.3 备份与恢复

4.4 性能调优

4.5 日常维护

5. 安全

6. 复制与高可用

PostgreSQL 支持多种复制方案以实现高可用性和读写分离。

附录

这份指南提供了 PostgreSQL 的全面概览和核心实践。请务必查阅官方文档以获取最准确和最新的信息,并根据您的具体需求和应用场景进行深入学习和配置调整。

到此这篇关于PostgreSQL数据库全攻略:从入门到精通的文章就介绍到这了,更多相关PostgreSQL从入门到精通内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文