Appearance
概述
什么是 PostgreSQL?
PostgreSQL 是一个功能强大的开源对象关系型数据库管理系统(ORDBMS),以其可靠性、功能丰富和性能卓越而闻名。它支持 SQL 标准并提供了许多高级功能。
PostgreSQL 的特点
1. 开源免费
- PostgreSQL 许可证,类似 BSD/MIT
- 完全免费使用和修改
- 活跃的社区支持
2. 标准兼容
- 高度兼容 SQL 标准
- 支持复杂查询
- 支持窗口函数、CTE 等
3. 扩展性强
- 支持自定义数据类型
- 支持自定义函数
- 丰富的扩展生态
4. 高级功能
- 完整的 ACID 事务
- MVCC 并发控制
- 表继承
- JSON 支持
核心概念
数据库(Database)
sql
CREATE DATABASE mydb;
\l
\c mydb
DROP DATABASE mydb;模式(Schema)
sql
CREATE SCHEMA app;
DROP SCHEMA app;表(Table)
sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE
);视图(View)
sql
CREATE VIEW active_users AS
SELECT * FROM users WHERE status = 'active';数据类型
数值类型
| 类型 | 说明 |
|---|---|
| SMALLINT | 2字节整数 |
| INTEGER | 4字节整数 |
| BIGINT | 8字节整数 |
| DECIMAL | 精确小数 |
| NUMERIC | 精确小数 |
| REAL | 4字节浮点数 |
| DOUBLE PRECISION | 8字节浮点数 |
| SERIAL | 自增整数 |
字符类型
| 类型 | 说明 |
|---|---|
| CHAR(n) | 定长字符串 |
| VARCHAR(n) | 变长字符串 |
| TEXT | 无限长度文本 |
日期时间类型
| 类型 | 说明 |
|---|---|
| DATE | 日期 |
| TIME | 时间 |
| TIMESTAMP | 日期时间 |
| TIMESTAMPTZ | 带时区的时间戳 |
| INTERVAL | 时间间隔 |
布尔类型
sql
BOOLEAN -- true/false/nullJSON 类型
| 类型 | 说明 |
|---|---|
| JSON | JSON 文本 |
| JSONB | 二进制 JSON,更高效 |
数组类型
sql
INTEGER[]
VARCHAR[][]其他类型
| 类型 | 说明 |
|---|---|
| UUID | 通用唯一标识符 |
| BYTEA | 二进制数据 |
| XML | XML 数据 |
| MONEY | 货币类型 |
| CIDR/INET | 网络地址 |
| GEOMETRY | 几何类型(PostGIS) |
安装 PostgreSQL
Windows 安装
- 下载 PostgreSQL 安装包
- 运行安装程序
- 设置超级用户密码
- 选择端口(默认 5432)
Linux 安装 (Ubuntu)
bash
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresqlmacOS 安装
bash
brew install postgresql
brew services start postgresql连接 PostgreSQL
命令行连接
bash
psql -U postgres
psql -h localhost -U postgres -d mydb常用参数
-h: 主机地址-p: 端口号-U: 用户名-d: 数据库名-W: 强制输入密码
psql 常用命令
数据库操作
sql
\l -- 列出数据库
\c mydb -- 连接数据库
\conninfo -- 显示连接信息表操作
sql
\dt -- 列出表
\d users -- 查看表结构
\d+ users -- 详细表结构其他命令
sql
\du -- 列出用户
\dn -- 列出模式
\df -- 列出函数
\di -- 列出索引
\x -- 切换扩展显示
\q -- 退出
\? -- 帮助
\h SELECT -- SQL 命令帮助基本操作
创建数据库
sql
CREATE DATABASE mydb;
CREATE DATABASE mydb WITH ENCODING 'UTF8';创建表
sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INTEGER CHECK (age >= 0),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);插入数据
sql
INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);查询数据
sql
SELECT * FROM users;
SELECT name, email FROM users WHERE age > 20;更新数据
sql
UPDATE users SET age = 26 WHERE name = '张三';删除数据
sql
DELETE FROM users WHERE id = 1;下一步学习
现在你已经了解了 PostgreSQL 的基础知识,可以继续学习: