基本操作
这篇讲 PostgreSQL 的日常基本操作:psql 客户端使用、库和表的创建、基础 CRUD、以及一些 PG 特有的便捷命令。
psql 客户端
psql 是 PG 的命令行客户端,类似 MySQL 的 mysql 命令:
# 连接数据库
docker exec -it pgsql psql -U postgres
# 指定数据库连接
docker exec -it pgsql psql -U postgres -d mydb
# 远程连接
psql -h 192.168.1.100 -p 5432 -U postgres -d mydb常用 psql 元命令(以 \ 开头):
| 命令 | 说明 |
|---|---|
\l | 列出所有数据库 |
\c dbname | 切换到指定数据库 |
\dt | 列出当前库的所有表 |
\d tablename | 查看表结构 |
\di | 列出所有索引 |
\du | 列出所有用户/角色 |
\dn | 列出所有 schema |
\e | 用外部编辑器编辑上一条命令 |
\q | 退出 |
数据库操作
-- 创建数据库
CREATE DATABASE myapp;
-- 指定所有者和编码
CREATE DATABASE myapp
OWNER postgres
ENCODING 'UTF8'
LC_COLLATE 'zh_CN.UTF-8'
LC_CTYPE 'zh_CN.UTF-8';
-- 查看所有数据库
SELECT datname FROM pg_database;
-- 删除数据库(需断开所有连接)
DROP DATABASE myapp;PG 中
DROP DATABASE 不能在事务块中执行,且当前连接不能占用目标数据库。如果报错 database is being accessed,先 \c postgres 切换到其他库再删除。表操作
-- 创建表
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- 自增主键(PG 特有语法)
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
age INT CHECK (age >= 0),
created_at TIMESTAMP DEFAULT NOW()
);
-- 查看表结构
\d users
-- 修改表
ALTER TABLE users ADD COLUMN bio TEXT;
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);
ALTER TABLE users DROP COLUMN bio;
-- 删除表
DROP TABLE IF EXISTS users;基础 CRUD
-- 插入
INSERT INTO users (username, email, age)
VALUES ('alice', '[email protected]', 28);
-- 批量插入
INSERT INTO users (username, email, age) VALUES
('bob', '[email protected]', 32),
('charlie', '[email protected]', 25);
-- 查询
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 25;
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
-- 更新
UPDATE users SET age = 29 WHERE username = 'alice';
-- 删除
DELETE FROM users WHERE username = 'charlie';
-- 使用 RETURNING 子句(PG 特有,非常实用)
INSERT INTO users (username, email, age)
VALUES ('david', '[email protected]', 30)
RETURNING id, created_at; -- 返回刚插入的 ID 和创建时间
UPDATE users SET age = age + 1
WHERE username = 'alice'
RETURNING username, age; -- 返回更新后的值RETURNING 是 PG 非常实用的特性——在 INSERT/UPDATE/DELETE 后直接返回相关字段,省去一次 SELECT 查询。MySQL 和 SQL Server 都没有这个语法。Schema 概念
PG 的 Schema 相当于数据库内部的命名空间——一个数据库可以有多个 schema,不同 schema 可以有同名表:
-- 创建 schema
CREATE SCHEMA blog;
CREATE SCHEMA shop;
-- 在指定 schema 下建表
CREATE TABLE blog.posts (
id SERIAL PRIMARY KEY,
title VARCHAR(200),
body TEXT
);
-- 查询时指定 schema
SELECT * FROM blog.posts;
-- 设置默认搜索路径
SET search_path TO blog, public;一句话小结
psql 客户端用 \ 元命令查看数据库信息,SERIAL 创建自增主键,RETURNING 减少查询次数,schema 隔离命名空间。PG 的这些小语法糖让日常操作比 MySQL 更顺手。下一篇讲 数据类型。
最后更新于