pgsql-01 PostgreSQL简介与安装
目录
01 - PostgreSQL简介与安装
1. 📖 PostgreSQL简介
1.1 什么是PostgreSQL?
PostgreSQL(简称Postgres)是一个功能强大的开源对象关系型数据库管理系统(ORDBMS),起源于1986年的POSTGRES项目。它以可靠性、数据完整性和正确性著称。
1.2 核心特点
- 开源免费:采用PostgreSQL License,非常宽松
- ACID兼容:完全支持事务特性
- 丰富的数据类型:支持JSON、数组、范围类型等
- 可扩展性:支持自定义函数、类型、操作符
- 强大的并发控制:MVCC(多版本并发控制)
- 全文搜索:内置强大的全文搜索引擎
- GIS支持:通过PostGIS扩展支持地理信息系统
1.3 PostgreSQL vs MySQL 核心对比
| 特性 | PostgreSQL | MySQL |
|---|---|---|
| 数据库类型 | 对象关系型数据库(ORDBMS) | 关系型数据库(RDBMS) |
| 开发组织 | PostgreSQL全球开发组 | Oracle公司 |
| 许可证 | PostgreSQL License(类BSD) | GPL v2(社区版)/ 商业许可 |
| ACID支持 | 完全支持 | InnoDB引擎支持 |
| 并发控制 | MVCC(多版本并发控制) | MVCC + 锁 |
| JSON支持 | 原生JSON/JSONB类型 | JSON类型(功能较弱) |
| 全文搜索 | 内置强大的全文搜索 | 基础全文搜索 |
| GIS支持 | PostGIS扩展(行业标准) | 基础空间扩展 |
| 窗口函数 | 完整支持 | 8.0+支持 |
| CTE递归查询 | 完全支持 | 8.0+支持 |
| 物化视图 | 原生支持 | 不支持(需要手动实现) |
| 表继承 | 支持 | 不支持 |
| 数组类型 | 原生支持 | 不支持 |
| 自定义类型 | 支持 | 有限支持 |
| 外键约束 | 完整支持 | InnoDB支持 |
| 触发器 | 更强大(支持语句级) | 仅支持行级 |
| 存储过程语言 | PL/pgSQL、Python、Perl等 | SQL、存储过程 |
| 复制 | 流复制、逻辑复制 | 主从复制、组复制 |
| 分区表 | 声明式分区(10+) | 8.0+原生支持 |
| 性能 | 复杂查询更优 | 简单查询更快 |
| 学习曲线 | 较陡峭 | 相对平缓 |
| 社区 | 学术氛围浓厚 | 用户基数更大 |
1.4 使用场景对比
选择PostgreSQL的场景:
- 需要复杂查询和数据分析
- 需要严格的数据完整性
- 需要JSON、数组等高级数据类型
- GIS地理信息系统
- 需要自定义扩展
- 数据仓库和OLAP场景
选择MySQL的场景:
- 简单的读写操作
- Web应用(LAMP/LNMP栈)
- 需要更快的简单查询
- 团队更熟悉MySQL
- 需要主从复制的高可用方案
2. 🔧 安装PostgreSQL
2.1 macOS安装
方法1:使用Homebrew(推荐)
# 安装PostgreSQL
brew install postgresql@15
# 启动服务
brew services start postgresql@15
# 查看版本
psql --version
# 初始化数据库(通常自动完成)
initdb /usr/local/var/postgres
方法2:使用Postgres.app
- 下载:https://postgresapp.com/
- 拖拽到Applications文件夹
- 双击启动
- 配置PATH:
echo 'export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
2.2 Linux安装(Ubuntu/Debian)
# 更新包列表
sudo apt update
# 安装PostgreSQL
sudo apt install postgresql postgresql-contrib
# 启动服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 查看状态
sudo systemctl status postgresql
# 切换到postgres用户
sudo -i -u postgres
# 进入PostgreSQL命令行
psql
2.3 Linux安装(CentOS/RHEL)
# 安装PostgreSQL仓库
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PostgreSQL 15
sudo yum install -y postgresql15-server postgresql15-contrib
# 初始化数据库
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
# 启动服务
sudo systemctl start postgresql-15
sudo systemctl enable postgresql-15
2.4 Windows安装
- 下载安装包:https://www.postgresql.org/download/windows/
- 运行安装程序
- 选择安装路径
- 设置超级用户密码
- 选择端口(默认5432)
- 完成安装
2.5 Docker安装(推荐用于开发环境)
# 拉取PostgreSQL镜像
docker pull postgres:15
# 运行容器
docker run --name postgres-dev \
-e POSTGRES_PASSWORD=yourpassword \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v postgres-data:/var/lib/postgresql/data \
-d postgres:15
# 进入容器
docker exec -it postgres-dev psql -U postgres
# 查看日志
docker logs postgres-dev
2.6 MySQL对比:安装差异
| 项目 | PostgreSQL | MySQL |
|---|---|---|
| 默认端口 | 5432 | 3306 |
| 超级用户 | postgres | root |
| 配置文件 | postgresql.conf | my.cnf/my.ini |
| 数据目录 | /var/lib/postgresql/data | /var/lib/mysql |
| 客户端工具 | psql | mysql |
| 服务名称 | postgresql | mysqld |
3. 🚀 初次使用
3.1 连接数据库
# PostgreSQL
psql -U postgres -d postgres
# MySQL对比
# mysql -u root -p
3.2 常用命令对比
| 操作 | PostgreSQL | MySQL |
|---|---|---|
| 查看数据库 | \l 或 \list |
SHOW DATABASES; |
| 切换数据库 | \c dbname 或 \connect dbname |
USE dbname; |
| 查看表 | \dt |
SHOW TABLES; |
| 查看表结构 | \d tablename |
DESC tablename; |
| 查看用户 | \du |
SELECT user FROM mysql.user; |
| 执行SQL文件 | \i filename.sql |
SOURCE filename.sql; |
| 查看帮助 | \? |
HELP; |
| 退出 | \q 或 Ctrl+D |
EXIT; 或 \q |
3.3 创建第一个数据库
-- PostgreSQL
CREATE DATABASE myapp;
-- 连接到新数据库
\c myapp
-- 创建测试表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO users (username, email) VALUES
('alice', 'alice@example.com'),
('bob', 'bob@example.com');
-- 查询数据
SELECT * FROM users;
-- MySQL对比
CREATE DATABASE myapp;
USE myapp;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username, email) VALUES
('alice', 'alice@example.com'),
('bob', 'bob@example.com');
SELECT * FROM users;
3.4 设置密码
-- PostgreSQL:修改postgres用户密码
ALTER USER postgres WITH PASSWORD 'newpassword';
-- MySQL对比
-- ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
4. 📊 图形化工具推荐
4.1 PostgreSQL专用工具
-
pgAdmin 4(官方推荐)
- 下载:https://www.pgadmin.org/
- 功能全面的Web界面
-
DBeaver(跨平台)
- 支持多种数据库
- 免费开源
-
DataGrip(JetBrains)
- 强大的IDE
- 付费软件
-
Postico(仅macOS)
- 界面优雅
- 易于使用
4.2 MySQL对比
- phpMyAdmin(Web界面)
- MySQL Workbench(官方工具)
- Navicat(商业软件)
- DBeaver(通用)
5. ✅ 验证安装
# 检查版本
psql --version
# 检查服务状态
# macOS
brew services list | grep postgresql
# Linux
sudo systemctl status postgresql
# 测试连接
psql -U postgres -c "SELECT version();"
预期输出:
PostgreSQL 15.x on x86_64-apple-darwin, compiled by Apple clang version ...
6. 🔐 安全建议
- 修改默认密码
ALTER USER postgres WITH PASSWORD 'strong_password_here';
- 配置防火墙
# Ubuntu
sudo ufw allow 5432/tcp
- 限制远程访问(编辑
pg_hba.conf)
# 仅允许本地连接
host all all 127.0.0.1/32 md5
- 使用SSL连接(生产环境必须)
7. 📚 下一步
现在你已经成功安装了PostgreSQL,接下来可以:
8. 🔗 参考资源
- 官方文档:https://www.postgresql.org/docs/
- 中文社区:http://www.postgres.cn/
- PostgreSQL Wiki:https://wiki.postgresql.org/
- GitHub:https://github.com/postgres/postgres
小贴士:PostgreSQL的命令是反斜杠(\)开头的,而MySQL使用的是SQL语句。这是初学者最容易混淆的地方!
xingliuhua