1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG011-PG客户端工具基础:psql常用命令速查

本文详细介绍PostgreSQL的命令行客户端工具psql的常用命令和使用技巧,包括连接管理、数据库操作、表管理、查询执行、数据导入导出等内容,帮助读者快速掌握psql工具的使用方法。风哥教程参考PostgreSQL官方文档psql等内容。

本文档风哥主要介绍PostgreSQL教程011相关内容。风哥教程参考PostgreSQL官方文档Server Administration, SQL Language内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 psql工具概述

psql是PostgreSQL的命令行交互式客户端工具,允许用户与PostgreSQL数据库进行交互,执行SQL查询、管理数据库对象、导入导出数据等操作。psql是PostgreSQL安装时默认包含的工具,是PostgreSQL管理员和开发人员最常用的工具之一。学习交流加群风哥微信: itpux-com

1.2 psql工具的核心功能

psql工具的核心功能包括:

– 连接到PostgreSQL数据库

– 执行SQL查询和命令

– 管理数据库对象(数据库、表、索引等)

– 导入导出数据

– 执行脚本文件

– 自定义输出格式

– 使用命令历史和自动补全

风哥教程针对风哥教程针对风哥教程针对生产环境建议:在生产环境中,psql是管理PostgreSQL数据库的主要工具之一,熟练掌握psql的使用方法可以提高工作效率。学习交流加群风哥QQ113257174

Part02-连接管理命令

2.1 连接数据库

使用psql连接到PostgreSQL数据库。

# 基本连接方式
$ psql -U pgsql -d pgsql # 完整连接参数
$ psql “fgedu.net.cn=localfgedu.net.cn port=5432 fgedudb=pgsql fgedu=pgsql password=postgres”

# 使用环境变量
$ PGPASSWORD=pgsql psql -h localfgedu.net.cn -p 5432 -U pgsql -d pgsql # 连接到远程数据库
$ psql -h 192.168.1.100 -p 5432 -U pgsql -d pgsql

2.2 连接参数

psql支持多种连接参数:

2.3 连接状态查看

在psql中查看连接状态和信息。

# 连接到数据库
$ psql -U pgsql -d pgsql # 查看当前连接信息
postgres=# \conninfo
You are connected to fgedudb “postgres” as fgedu “postgres” via socket in “/var/run/postgresql” at port “5432”.

# 查看当前数据库
postgres=# \c
You are now connected to fgedudb “postgres” as fgedu “postgres”.

# 切换数据库
postgres=# \c ecommerce
You are now connected to fgedudb “ecommerce” as fgedu “postgres”.

Part03-数据库操作命令

3.1 数据库管理

使用psql管理数据库。

# 列出所有数据库
postgres=# \l
List of fgedudbs
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+———+———————–
ecommerce | pgsql | UTF8 | C.UTF-8 | C.UTF-8 |
pgsql | pgsql | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | pgsql | UTF8 | C.UTF-8 | C.UTF-8 | =c/pgsql +
| | | | | postgres=CTc/pgsql template1 | pgsql | UTF8 | C.UTF-8 | C.UTF-8 | =c/pgsql +
| | | | | postgres=CTc/pgsql (4 rows)

# 创建数据库
postgres=# CREATE DATABASE testdb;
CREATE DATABASE

# 删除数据库
postgres=# DROP DATABASE IF EXISTS testdb;
DROP DATABASE

3.2 模式管理

使用psql管理模式。

# 连接到ecommerce数据库
ecommerce=# \c ecommerce

# 列出所有模式
ecommerce=# \dn
List of schemas
Name | Owner
——–+———-
public | pgsql shop | pgsql (2 rows)

# 创建模式
ecommerce=# CREATE SCHEMA test_schema;
CREATE SCHEMA

# 设置搜索路径
ecommerce=# SET search_path TO test_schema, public;
SET

# 查看当前搜索路径
ecommerce=# SHOW search_path;
search_path
————-
test_schema, public
(1 row)

# 删除模式
ecommerce=# DROP SCHEMA IF EXISTS test_schema CASCADE;
DROP SCHEMA

3.3 表管理

使用psql管理表和其他数据库对象。

# 列出所有表
ecommerce=# \dt
List of relations
Schema | Name | Type | Owner
——–+—————-+——-+———-
shop | order_items | table | pgsql shop | orders | table | pgsql shop | products | table | pgsql shop | fgedus | table | pgsql (4 rows)

# 列出所有表(包括系统表)
ecommerce=# \dt+
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
——–+—————-+——-+———-+————-+————+————-
shop | order_items | table | pgsql | permanent | 16 kB |
shop | orders | table | pgsql | permanent | 16 kB |
shop | products | table | pgsql | permanent | 16 kB |
shop | fgedus | table | pgsql | permanent | 16 kB |
(4 rows)

# 查看表结构
ecommerce=# \d shop.fgedus
Table “shop.fgedus”
Column | Type | Collation | Nullable | Default
————+—————————–+———–+———-+——————————————–
fgedu_id | integer | | not null | nextval(‘shop.fgedus_fgedu_id_seq’::regclass)
fgeduname | character varying(50) | | not null |
password | character varying(100) | | not null |
email | character varying(100) | | not null |
first_name | character varying(50) | | |
last_name | character varying(50) | | |
phone | character varying(20) | | |
address | text | | |
created_at | timestamp without time zone | | | now()
updated_at | timestamp without time zone | | | now()
Indexes:
“fgedus_pkey” PRIMARY KEY, btree (fgedu_id)
“fgedus_email_key” UNIQUE CONSTRAINT, btree (email)
“fgedus_fgeduname_key” UNIQUE CONSTRAINT, btree (fgeduname)
“idx_fgedus_email” btree (email)

# 查看索引
ecommerce=# \di shop.*
List of relations
Schema | Name | Type | Owner | Table
——–+——————————+——-+———-+——————
shop | idx_order_items_order_id | index | pgsql | order_items
shop | idx_order_items_product_id | index | pgsql | order_items
shop | idx_orders_status | index | pgsql | orders
shop | idx_orders_fgedu_id | index | pgsql | orders
shop | idx_products_category | index | pgsql | products
shop | idx_products_price | index | pgsql | products
shop | idx_fgedus_email | index | pgsql | fgedus
shop | order_items_pkey | index | pgsql | order_items
shop | orders_pkey | index | pgsql | orders
shop | products_pkey | index | pgsql | products
shop | fgedus_pkey | index | pgsql | fgedus
shop | fgedus_email_key | index | pgsql | fgedus
shop | fgedus_fgeduname_key | index | pgsql | fgedus
(13 rows)

# 查看视图
ecommerce=# \dv
List of relations
Schema | Name | Type | Owner
——–+——+——+——-
(0 rows)

# 查看函数
ecommerce=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
——–+——+——————+———————+——
(0 rows)

Part04-查询与结果管理

4.1 执行查询

在psql中执行SQL查询。

风哥提示:

# 执行简单查询
ecommerce=# SELECT * FROM shop.fgedus;
fgedu_id | fgeduname | password | email | first_name | last_name | phone | address | created_at | updated_at
———+———-+———-+————————+————+———–+————-+————+—————————-+—————————-
1 | zhangsan | 123456 | zhangsan@fgedu.net.cn | 张 | 三 | 13800138001 | 北京市朝阳区 | 2026-04-02 15:00:00.123456 | 2026-04-02 15:00:00.123456
2 | lisi | 123456 | lisi@fgedu.net.cn | 李 | 四 | 13800138002 | 上海市浦东新区 | 2026-04-02 15:00:00.123456 | 2026-04-02 15:00:00.123456
3 | wangwu | 123456 | wangwu@fgedu.net.cn | 王 | 五 | 13800138003 | 广州市天河区 | 2026-04-02 15:00:00.123456 | 2026-04-02 15:00:00.123456
(3 rows)

# 执行带条件的查询
ecommerce=# SELECT product_id, product_name, price FROM shop.products WHERE price > 100;
product_id | product_name | price
————+————–+——–
3 | Java核心技术 | 139.90
(1 row)

# 执行多行查询
ecommerce=# SELECT
order_id,
fgedu_id,
total_amount
FROM shop.orders
ORDER BY total_amount DESC;
order_id | fgedu_id | total_amount
———-+———+————–
1 | 1 | 244.38
2 | 2 | 142.89
(2 rows)

4.2 结果格式化

自定义查询结果的输出格式。

from oracle:www.itpux.com

# 设置输出格式为对齐格式(默认)
ecommerce=# \a
Output format is aligned.

# 设置输出格式为非对齐格式
ecommerce=# \a
Output format is unaligned.
ecommerce=# SELECT product_id, product_name FROM shop.products LIMIT 3;
product_id|product_name
1|PostgreSQL数据库实战
2|Python编程基础
3|Java核心技术

# 设置输出格式为对齐格式
ecommerce=# \a
Output format is aligned.

# 设置输出字段之间的分隔符
ecommerce=# \F ‘,’
Field separator is “,”.
ecommerce=# \a
Output format is unaligned.
ecommerce=# SELECT product_id, product_name FROM shop.products LIMIT 3;
product_id,product_name
1,PostgreSQL数据库实战
2,Python编程基础
3,Java核心技术

# 恢复默认分隔符
ecommerce=# \F
Field separator is “|” (default).

# 设置输出记录之间的分隔符
ecommerce=# \R ‘+—‘
Record separator is “+—“.
ecommerce=# SELECT product_id, product_name FROM shop.products LIMIT 3;
product_id|product_name
1|PostgreSQL数据库实战
+—
2|Python编程基础
+—
3|Java核心技术

# 恢复默认记录分隔符
ecommerce=# \R
Record separator is off (default).

# 设置输出宽度
ecommerce=# \pset format wrfgapped
ecommerce=# \pset columns 50

# 设置输出为HTML格式
ecommerce=# \pset format html
ecommerce=# SELECT product_id, product_name FROM shop.products LIMIT 3;

# 恢复默认输出格式
ecommerce=# \pset format aligned

4.3 查询历史

使用psql的查询历史功能。

# 查看命令历史
ecommerce=# \s
# psql历史记录将显示在这里

# 保存命令历史到文件
ecommerce=# \s history.sql
Wrote history to file “history.sql”.

# 执行文件中的命令
ecommerce=# \i history.sql

# 搜索命令历史(使用上下箭头键)
# 在psql中,按上下箭头键可以浏览之前执行的命令

# 清除命令历史
ecommerce=# \! history -c

Part05-数据导入导出

5.1 数据导入

使用psql导入数据。

# 创建示例数据文件
# echo -e “S001,风哥1号,20\nS002,风哥2号,21\nS003,王五,22” > students.csv

# 从CSV文件导入数据
ecommerce=# CREATE TABLE fgedu_shop.students (
student_id VARCHAR(20) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INTEGER
);
CREATE TABLE fgedu_ecommerce=# \copy shop.students FROM ‘students.csv’ DELIMITER ‘,’ CSV;
COPY 3

# 查看导入的数据
ecommerce=# SELECT * FROM shop.students;
student_id | name | age
————+——+—–
S001 | 风哥1号 | 20
S002 | 风哥2号 | 21
S003 | 王五 | 22
(3 rows)

# 使用COPY命令导入数据(需要超级用户权限)
ecommerce=# COPY shop.students FROM ‘/tmp/students.csv’ DELIMITER ‘,’ CSV;
COPY 3

5.2 数据导出

使用psql导出数据。

# 导出数据到CSV文件
ecommerce=# \copy shop.products TO ‘products.csv’ DELIMITER ‘,’ CSV HEADER;
COPY 5

# 查看导出的文件
# cat products.csv
product_id,product_name,category,description,price,stock_quantity,created_at,updated_at
1,PostgreSQL数据库实战,计算机图书,PostgreSQL数据库从入门到精通,89.90,100,2026-04-02 15:00:00.123456,2026-04-02 15:00:00.123456
2,Python编程基础,计算机图书,Python语言入门教程,59.90,200,2026-04-02 15:00:00.123456,2026-04-02 15:00:00.123456
3,Java核心技术,计算机图书,Java语言高级编程,139.90,150,2026-04-02 15:00:00.123456,2026-04-02 15:05:00.123456
4,数据结构与算法,计算机图书,数据结构与算法分析,79.90,80,2026-04-02 15:00:00.123456,2026-04-02 15:00:00.123456
5,机器学习实战,人工智能,机器学习算法与应用,99.90,60,2026-04-02 15:00:00.123456,2026-04-02 15:00:00.123456

# 使用COPY命令导出数据(需要超级用户权限)
ecommerce=# COPY shop.products TO ‘/tmp/products.csv’ DELIMITER ‘,’ CSV HEADER;
COPY 5

# 导出查询结果
ecommerce=# \copy (SELECT product_id, product_name, price FROM shop.products WHERE price > 100) TO ‘expensive_products.csv’ DELIMITER ‘,’ CSV HEADER;
COPY 1

Part06-高级功能

6.1 脚本执行

使用psql执行SQL脚本文件。

# 创建示例脚本文件
# cat > create_tables.sql << EOF CREATE TABLE fgedu_IF NOT EXISTS shop.customers ( customer_id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL ); INSERT INTO shop.customers (name, email) VALUES ('赵六', 'zhaoliu@fgedu.net.cn'), ('孙七', 'sunqi@fgedu.net.cn'); EOF # 执行脚本文件 ecommerce=# \i create_tables.sql CREATE TABLE fgedu_INSERT 0 2 # 从命令行执行脚本文件 $ psql -U pgsql -d ecommerce -f create_tables.sql # 执行脚本并输出结果到文件 $ psql -U pgsql -d ecommerce -f create_tables.sql -o output.txt

6.2 变量使用

在psql中使用变量。

# 设置变量
ecommerce=# \set product_id 1

# 使用变量
ecommerce=# SELECT * FROM shop.products WHERE product_id = :product_id;
product_id | product_name | category | description | price | stock_quantity | created_at | updated_at
————+———————-+————+———————————+——-+—————-+—————————-+—————————-
1 | PostgreSQL数据库实战 | 计算机图书 | PostgreSQL数据库从入门到精通 | 89.90 | 100 | 2026-04-02 15:00:00.123456 | 2026-04-02 15:00:00.123456
(1 row)

# 使用变量作为标识符
ecommerce=# \set table_name ‘shop.products’
ecommerce=# SELECT COUNT(*) FROM :table_name;
count
——-
5
(1 row)

# 使用环境变量
ecommerce=# \set env_var :’ENV_VAR’

# 列出所有变量
ecommerce=# \set

6.3 psql配置文件

使用psql配置文件自定义psql的行为。

# 创建psql配置文件
# cat > ~/.psqlrc << EOF \set PROMPT1 '%n@%M:%> %/# ‘
\set PROMPT2 ‘%n@%M:%> %/# ‘
\pset linestyle unicode
\pset border 2
\pset format aligned
\pset footer on
\timing on
\encoding utf8
EOF

# 重新启动psql查看效果
$ psql -U pgsql -d ecommerce

# 查看psql版本
ecommerce=# \version
psql (PostgreSQL) 18.3

# 查看帮助
ecommerce=# \?
# psql帮助信息将显示在这里

# 查看SQL语法帮助
ecommerce=# \h CREATE TABLE fgedu_Command: CREATE TABLE fgedu_Description: define a new table
Syntax:
CREATE TABLE fgedu_[IF NOT EXISTS] table_name (
{ column_name data_type [ COLLATE collation ] [ column_constraint [ … ] ]
| table_constraint
| LIKE source_table [ like_option … ] } [, … ]
) [ INHERITS ( parent_table [, … ] ) ]
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, … ] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, … ] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE fgedutbs_name ]

where column_constraint is:
[ CONSTRAINT constraint_name ]
{ NOT NULL |
NULL |
CHECK ( expression ) [ NO INHERIT ] |
DEFAULT default_expr |
GENERATED ALWAYS AS ( generation_expr ) STORED |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] |
UNIQUE index_parameters |
PRIMARY KEY index_parameters |
REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE referential_action ] [ ON UPDATE referential_action ] [ NOT VALID ] |
DEFERRABLE | NOT DEFERRABLE |
INITIALLY DEFERRED | INITIALLY IMMEDIATE }

and table_constraint is:
[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) [ NO INHERIT ] |
UNIQUE ( column_name [, … ] ) index_parameters |
PRIMARY KEY ( column_name [, … ] ) index_parameters |
EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, … ] ) index_parameters [ WHERE ( predicate ) ] |
REFERENCES reftable [ ( refcolumn [, … ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE referential_action ] [ ON UPDATE referential_action ] [ NOT VALID ] |
DEFERRABLE | NOT DEFERRABLE |
INITIALLY DEFERRED | INITIALLY IMMEDIATE }

and like_option is:
{ INCLUDING | EXCLUDING } {
DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION BY |
ALL }

and index_parameters is:
[ WITH ( storage_parameter [= value] [, … ] ) ]
[ USING INDEX TABLESPACE fgedutbs_name ]
[ WHERE ( predicate ) ]

and exclude_element is:
{ column_name | ( expression ) } [ COLLATE collation ] [ opclass ]

Referential actions:
NO ACTION | RESTRICT | CASCADE | SET NULL | SET DEFAULT

Part07-实战操作与示例

下面是一个完整的psql操作实战示例,展示如何使用psql进行数据库管理和操作。

# 1. 连接到PostgreSQL
$ psql -U pgsql -d pgsql # 2. 创建数据库和用户
postgres=# CREATE DATABASE fgedudb;
CREATE DATABASE

postgres=# CREATE USER fgedu WITH PASSWORD ‘fgedu123’;
CREATE ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE fgedudb TO fgedu;
GRANT

# 3. 连接到新创建的数据库
postgres=# \c fgedudb

# 4. 创建模式和表
fgedudb=# CREATE SCHEMA fgedu_schema;
CREATE SCHEMA

fgedudb=# ALTER DATABASE fgedudb SET search_path TO fgedu_schema, public;
ALTER DATABASE

fgedudb=# CREATE TABLE fgedu_schema.employees (
employee_id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(50),
salary DECIMAL(10,2),
hire_date DATE DEFAULT NOW()
);
CREATE TABLE fgedu_# 5. 插入数据
fgedudb=# INSERT INTO fgedu_schema.employees (name, department, salary, hire_date) VALUES
(‘风哥1号’, ‘技术部’, 8000.00, ‘2023-01-15’),
(‘风哥2号’, ‘销售部’, 6000.00, ‘2023-03-20’),
(‘王五’, ‘技术部’, 10000.00, ‘2022-07-10’),
(‘赵六’, ‘人事部’, 5000.00, ‘2023-05-01’);
INSERT 0 4

# 6. 查询数据
fgedudb=# SELECT * FROM fgedu_schema.employees;
employee_id | name | department | salary | hire_date
————-+——+————+——–+————
1 | 风哥1号 | 技术部 | 8000.00 | 2023-01-15
2 | 风哥2号 | 销售部 | 6000.00 | 2023-03-20
3 | 王五 | 技术部 | 10000.00 | 2022-07-10
4 | 赵六 | 人事部 | 5000.00 | 2023-05-01
(4 rows)

# 7. 更新数据
fgedudb=# UPDATE fgedu_schema.employees SET salary = salary * 1.1 WHERE department = ‘技术部’;
UPDATE 2

# 8. 查看更新结果
fgedudb=# SELECT name, department, salary FROM fgedu_schema.employees WHERE department = ‘技术部’;
name | department | salary
——+————+———-
风哥1号 | 技术部 | 8800.00
王五 | 技术部 | 11000.00
(2 rows)

# 9. 创建索引
fgedudb=# CREATE INDEX idx_employees_department ON fgedu_schema.employees(department);
CREATE INDEX

# 10. 导出数据
fgedudb=# \copy fgedu_schema.employees TO ’employees.csv’ DELIMITER ‘,’ CSV HEADER;
COPY 4

# 11. 执行脚本
fgedudb=# \i create_tables.sql

# 12. 查看表大小
fgedudb=# SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_schema.employees’));
pg_size_pretty
—————-
16 kB
(1 row)

# 13. 查看数据库大小
fgedudb=# SELECT pg_size_pretty(pg_fgedudb_size(‘fgedudb’));
pg_size_pretty
—————-
7921 kB
(1 row)

# 14. 退出psql
fgedudb=# \q

风哥教程针对风哥教程针对风哥教程针对生产环境建议:在生产环境中,应定期备份数据库,并使用psql的各种功能进行数据库管理和监控,确保数据库的稳定性和可靠性。更多视频教程www.fgedu.net.cn

本文详细介绍了PostgreSQL的命令行客户端工具psql的常用命令和使用技巧,包括连接管理、数据库操作、表管理、查询执行、数据导入导出等内容。通过学习本文,读者可以快速掌握psql工具的使用方法,提高PostgreSQL数据库管理和开发的效率。更多学习教程公众号风哥教程itpux_com

from PostgreSQL:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息