这里整理了一份非常实用的 PostgreSQL 常用命令清单,从连接到数据库、基本操作到高级功能都涵盖了。
1. 连接与退出数据库#
连接到一个特定的数据库:
psql -h <主机名> -p <端口号> -U <用户名> -d <数据库名>- 例如,连接本地的
mydb数据库:psql -h localhost -p 5432 -U postgres -d mydb - 如果连接本地默认端口(5432)的默认数据库,可以简写为:
psql -U postgres
- 例如,连接本地的
退出 psql 命令行界面:
\q
2. 数据库 (Database) 操作#
查看所有数据库列表:
\l- 更详细的列表(包括大小、描述等):
\l+
- 更详细的列表(包括大小、描述等):
创建新数据库:
CREATE DATABASE <数据库名>;- 例如:
CREATE DATABASE mynewdb;
- 例如:
切换/连接到另一个数据库:
\c <数据库名>- 例如:
\c mynewdb
- 例如:
删除数据库:
DROP DATABASE <数据库名>;- 注意:此操作无法撤销,请谨慎使用。不能在有活跃连接时删除数据库。
3. 表 (Table) 操作#
查看当前数据库中的所有表:
\dt- 更详细的列表(包括大小、描述等):
\dt+
- 更详细的列表(包括大小、描述等):
查看表的结构(定义):
\d <表名>- 例如:
\d users
- 例如:
创建新表:
CREATE TABLE <表名> ( <列名1> <数据类型> <约束>, <列名2> <数据类型> <约束>, ... );- 例如:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );删除表:
DROP TABLE <表名>;- 注意:此操作会删除表和其中的所有数据,无法撤销。
清空表(删除所有数据,但保留表结构):
TRUNCATE TABLE <表名>;
4. 查询与数据操作#
查询数据:
SELECT * FROM <表名>; -- 查询所有列 SELECT <列名1>, <列名2> FROM <表名> WHERE <条件>; -- 条件查询指定列插入数据:
INSERT INTO <表名> (<列名1>, <列名2>, ...) VALUES (<值1>, <值2>, ...);更新数据:
UPDATE <表名> SET <列名1> = <新值1>, <列名2> = <新值2> WHERE <条件>; -- 务必小心!没有 WHERE 条件会更新所有行删除数据:
DELETE FROM <表名> WHERE <条件>; -- 务必小心!没有 WHERE 条件会删除所有行
5. 信息查询与元命令 (Meta-Commands)#
这些是以反斜杠 \ 开头的特殊命令,用于获取数据库的元信息。
列出所有可用的命令:
\?查看所有角色(用户):
\du或\du+(查看详情)查看当前连接的信息(当前数据库、用户、端口等):
\conninfo查看索引:
\di查看视图:
\dv查看函数:
\df显示命令历史(类似 Linux 的
history):\s执行外部文件中的 SQL:
\i <文件路径>- 例如:
\i /path/to/myscript.sql
- 例如:
6. 用户与权限 (Role & Privilege) 管理#
创建用户/角色:
CREATE ROLE <用户名> WITH LOGIN PASSWORD '你的密码';或者更常用的:
CREATE USER <用户名> WITH PASSWORD '你的密码';授予权限(例如,将
mydb的所有权限授予用户myuser):GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;修改用户密码:
ALTER ROLE <用户名> WITH PASSWORD '新密码';
实用技巧#
- 自动补全:在
psql命令行中,按Tab键可以自动补全对象名(如数据库、表、列名)和关键字。 - 分页显示:如果结果集很长,
psql会自动使用分页器(通常是less)。按空格键向下翻页,按q退出。 - 执行系统命令:在
psql中,可以用\! <系统命令>来执行 shell 命令。例如\! ls -l。 - 编辑命令:输入命令时,可以用
\e呼出默认编辑器(如 vim)来编辑复杂的命令或函数,保存退出后会自动执行。