PostgreSQL作为一款功能强大的开源关系型数据库,被越来越多的项目采用。不过对于刚从MySQL或者其他数据库转过来的新手来说,PostgreSQL的命令体系有不少自己的特点,比如默认用户是postgres、连接时必须指定数据库、元命令以反斜杠开头等。如果不了解这些差异,第一次使用时很容易到处碰壁。这篇文章把日常使用中最常见的命令做了系统梳理,从服务管理到数据操作,再到备份恢复和权限管理,帮你少走弯路。

一、服务管理与连接登录
在正式操作数据库之前,首先要保证PostgreSQL服务正常运行。不同操作系统的管理方式略有差别,Linux下一般通过系统的服务管理工具控制,Windows下则依赖net命令或者服务管理器。
以CentOS为例,启动和停止服务的命令如下:
# 启动PostgreSQL服务 systemctl start postgresql # 停止服务 systemctl stop postgresql # 查看服务状态 systemctl status postgresql # 设置开机自启 systemctl enable postgresql
服务启动后,PostgreSQL安装时会自动创建一个名为postgres的超级用户。Linux下需要先切换到这个系统用户再连接数据库,这是新手最常踩的坑之一:
# 切换到postgres用户 su - postgres # 进入psql交互式终端 psql # 直接连接指定数据库 psql -d mydb # 通过网络连接,指定主机、端口、用户和数据库 psql -h 192.168.1.100 -p 5432 -U myuser -d mydb
连接成功后,命令提示符会变成类似postgres=#的样子。如果是普通用户,提示符则是=>。输入\q即可退出psql终端。
二、psql元命令:最应该优先掌握的部分
psql提供了一大批以反斜杠开头的元命令,这些命令不需要分号结尾,是日常查看数据库结构信息的主要手段。可以说掌握了元命令,日常管理工作就完成了一半。
下面这些是使用频率最高的元命令:
\l -- 列出所有数据库 \c mydb -- 切换到mydb数据库 \dt -- 列出当前数据库的所有表 \d users -- 查看users表的结构,包括字段、类型、索引 \di -- 查看所有索引 \du -- 查看所有用户和角色 \dn -- 查看所有schema \df -- 查看所有函数 \x -- 切换扩展显示模式,字段多时更易读 \timing on -- 开启SQL执行耗时统计 \h -- 查看SQL命令的帮助 \? -- 查看元命令的帮助 \q -- 退出psql
其中\d系列命令尤其重要。\d 表名不仅能看到字段定义,还会显示主键、外键、索引、约束等完整信息,比很多图形化工具展示得还要全面。而\x开启扩展显示后,一条字段很多的记录会纵向排列,阅读体验明显提升,查询单条数据时建议常开。
另外还有两个导出相关的元命令也很实用:\copy可以直接在客户端层面导入导出CSV文件,而服务器端的COPY命令则需要数据库服务进程有权限访问对应路径,两者使用场景要区分清楚。
三、数据库与表的常用SQL操作
创建和删除数据库是最基础的操作,注意创建数据库时不能处在事务块中,也不能删除自己当前正在连接的数据库:
-- 创建数据库 CREATE DATABASE mydb ENCODING 'UTF8'; -- 删除数据库 DROP DATABASE mydb; -- 重命名数据库 ALTER DATABASE mydb RENAME TO newdb;
建表方面,PostgreSQL支持非常丰富的字段类型,其中自增主键的写法和MySQL不同,使用SERIAL或者GENERATED ALWAYS AS IDENTITY:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO users (username, email) VALUES ('zhangsan', 'zs@ipipp.com');
-- 查询数据
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
-- 修改表结构
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users DROP COLUMN phone;
ALTER TABLE users RENAME COLUMN username TO user_name;
-- 更新和删除
UPDATE users SET email = 'new@ipipp.com' WHERE id = 1;
DELETE FROM users WHERE id = 1;
需要特别提醒的是,PostgreSQL执行UPDATE和DELETE时如果忘记写WHERE条件,会直接操作全表且不会给出二次确认,生产环境操作前务必先写好条件或先在事务中执行,确认无误后再COMMIT。
四、用户与权限管理
PostgreSQL的权限体系基于角色(ROLE)实现,用户和角色在本质上是同一个概念。创建用户并授权是部署应用前的必备操作:
-- 创建用户并设置密码 CREATE USER appuser WITH PASSWORD 'your_password'; -- 创建数据库并指定所有者 CREATE DATABASE appdb OWNER appuser; -- 授予权限 GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser; GRANT SELECT, INSERT, UPDATE ON users TO appuser; -- 回收权限 REVOKE ALL PRIVILEGES ON users FROM appuser; -- 修改用户密码 ALTER USER appuser WITH PASSWORD 'new_password';
如果遇到明明授权了却连不上的情况,多半是pg_hba.conf配置文件的限制。这个文件控制哪些IP可以用什么方式连接数据库,修改后需要执行SELECT pg_reload_conf();或重启服务才能生效。另外默认监听地址配置在postgresql.conf的listen_addresses参数中,默认只监听本地,需要远程连接时要改为'*'。
五、备份恢复与维护命令
备份恢复建议使用官方自带的pg_dump和pg_restore工具,它们在操作系统命令行下执行而不是在psql中:
# 备份单个数据库为自定义格式(推荐,支持并行恢复) pg_dump -U postgres -Fc mydb > mydb.dump # 备份为纯SQL文本格式 pg_dump -U postgres -Fp mydb > mydb.sql # 仅备份表结构 pg_dump -U postgres -s mydb > schema.sql # 恢复自定义格式备份 pg_restore -U postgres -d mydb mydb.dump # 恢复纯SQL备份 psql -U postgres -d mydb < mydb.sql # 查看当前数据库连接数 SELECT count(*) FROM pg_stat_activity;
日常维护中还有几条命令值得记住。VACUUM用于回收已删除数据占用的空间,ANALYZE用于更新统计信息帮助优化器制定执行计划,REINDEX可以重建索引修复损坏。定期执行VACUUM ANALYZE是保持数据库性能的好习惯。
最后补充一个常见报错的处理:FATAL: role "xxx" does not exist通常是用户名写错或者没有创建对应角色;FATAL: database "xxx" does not exist则是psql默认用系统用户名去连接同名数据库导致的,加参数-U postgres -d postgres即可解决。把这些基础命令用熟之后,再接触复制、分区、JSONB这些进阶特性就会顺畅很多。
PostgreSQL常用命令psql命令数据库操作修改时间:2026-09-07 19:10:41