目录

pgsql-01 PostgreSQL简介与安装

01 - PostgreSQL简介与安装

1. 📖 PostgreSQL简介

1.1 什么是PostgreSQL?

PostgreSQL(简称Postgres)是一个功能强大的开源对象关系型数据库管理系统(ORDBMS),起源于1986年的POSTGRES项目。它以可靠性、数据完整性和正确性著称。

1.2 核心特点

  1. 开源免费:采用PostgreSQL License,非常宽松
  2. ACID兼容:完全支持事务特性
  3. 丰富的数据类型:支持JSON、数组、范围类型等
  4. 可扩展性:支持自定义函数、类型、操作符
  5. 强大的并发控制:MVCC(多版本并发控制)
  6. 全文搜索:内置强大的全文搜索引擎
  7. 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

  1. 下载:https://postgresapp.com/
  2. 拖拽到Applications文件夹
  3. 双击启动
  4. 配置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安装

  1. 下载安装包:https://www.postgresql.org/download/windows/
  2. 运行安装程序
  3. 选择安装路径
  4. 设置超级用户密码
  5. 选择端口(默认5432)
  6. 完成安装

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;
退出 \qCtrl+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专用工具

  1. pgAdmin 4(官方推荐)

    • 下载:https://www.pgadmin.org/
    • 功能全面的Web界面
  2. DBeaver(跨平台)

    • 支持多种数据库
    • 免费开源
  3. DataGrip(JetBrains)

    • 强大的IDE
    • 付费软件
  4. 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. 🔐 安全建议

  1. 修改默认密码
ALTER USER postgres WITH PASSWORD 'strong_password_here';
  1. 配置防火墙
# Ubuntu
sudo ufw allow 5432/tcp
  1. 限制远程访问(编辑pg_hba.conf
# 仅允许本地连接
host    all             all             127.0.0.1/32            md5
  1. 使用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语句。这是初学者最容易混淆的地方!