使用psql命令行工具
@ sasaba | 星期一,四月 17 日,2023 年 | 3 分钟阅读 | 更新于 星期一,四月 17 日,2023 年

使用psql命令行工具。

PostgreSQL简介

PostgreSQL是一个功能强大的开源对象关系型数据库系统。它具有超过30年的开发历史,得到了广泛的认可和使用。PostgreSQL的一个关键特性是其丰富的扩展性,可以通过用户自定义的函数、数据类型和操作符来轻松扩展其功能。

psql命令行工具

psql是PostgreSQL的交互式终端工具,允许用户执行SQL查询和管理PostgreSQL数据库。以下是psql的一些基本用法及高级功能:

连接到数据库

要使用psql连接到PostgreSQL数据库,请在命令行中输入以下命令:

psql -h hostname -p port -U username -d databasename

其中,hostname是数据库服务器的地址,port是服务器的端口号(默认为5432),username是要连接的用户,databasename是要连接的数据库名称。

执行SQL查询

在psql提示符下,您可以直接输入SQL查询并按Enter键执行。例如,要查看数据库中所有的表,可以执行以下命令:

1、列举数据库:\l
2、选择数据库:\c 数据库名
3、查看该某个库中的所有表:\dt
4、切换数据库:\c interface
5、查看某个库中的某个表结构:\d 表名
6、退出psgl:\q

要执行更复杂的查询,例如从某个表中查询数据,可以输入如下命令:

SELECT * FROM tablename;

请注意,在SQL查询的末尾添加分号;是必须的。

查询历史记录与命令补全

psql提供了命令历史记录功能,您可以使用上下箭头键在以前执行过的命令之间进行导航。同时,psql还支持命令补全功能,可以在输入命令时按Tab键自动补全命令和表名等。

事务处理

PostgreSQL支持事务处理,允许您在一个事务中执行一组操作,确保要么所有操作都成功执行,要么所有操作都回滚。要开始一个新的事务,使用BEGIN命令:

BEGIN;

要提交事务中的更改,使用COMMIT命令:

COMMIT;

要回滚事务中的更改,使用ROLLBACK命令:

ROLLBACK;

导入和导出数据

psql还允许您导入和导出数据。要将数据从CSV文件导入到表中,可以使用以下命令:

COPY tablename FROM '/path/to/your/csvfile.csv' WITH (FORMAT csv, HEADER);

要将表中的数据导出到CSV文件,可以使用以下命令:

COPY tablename TO '/path/to/your/csvfile.csv' WITH (FORMAT csv, HEADER);

一些操作

VACUUM

VACUUM是PostgreSQL中的一个重要命令,它用于清理数据库中的无用数据。VACUUM命令会删除数据库中的无用数据,释放磁盘空间,并重新组织表中的数据,以便更有效地使用磁盘空间。VACUUM命令还会更新数据库中的统计信息,这些统计信息用于优化查询计划。

VACUUM命令有两种模式:FULL和FREEZE。FULL模式会清理数据库中的所有无用数据,而FREEZE模式只会清理已经被删除的数据。默认情况下,VACUUM命令会使用FULL模式。要使用FREEZE模式,可以在VACUUM命令后面添加FREEZE选项:

VACUUM TABLE tablename FREEZE;

要使用FULL模式,可以在VACUUM命令后面添加FULL选项:

VACUUM TABLE tablename FULL;

TRUNCATE

清空表中的数据,但不删除表本身。

TRUNCATE TABLE tablename;

删除XLOG

之前有一次遇到VACUUM FULL的时候,由于表太大,导致VACUUM FULL的时候,数据库的XLOG文件太大,导致数据库无法启动,所以需要删除XLOG文件。

关闭数据库

[postgres@localhost pg_xlog]$ pg_stop
waiting for server to shut down...... done
server stopped

查看版本控制信息

[postgres@localhost ~]$ pg_controldata
pg_control version number:            903
Catalog version number:               201105231
Database system identifier:           5741432812849707775
Database cluster state:               shut down
pg_control last modified:             Thu 10 Jan 2013 07:56:36 AM CST
Latest checkpoint location:           2/38000020
Prior checkpoint location:            2/34009190
Latest checkpoint's REDO location:    2/38000020
Latest checkpoint's TimeLineID:       4
Latest checkpoint's NextXID:          0/1888
Latest checkpoint's NextOID:          65595
Latest checkpoint's NextMultiXactId:  1
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        1792
Latest checkpoint's oldestXID's DB:   1
Latest checkpoint's oldestActiveXID:  0
Time of latest checkpoint:            Thu 10 Jan 2013 07:56:35 AM CST

注意这两个参数: Latest checkpoint’s NextXID: 0/ 1888

Latest checkpoint’s NextOID: 65595

重置,删除 pg_xlog

[postgres@localhost ~]$ pg_resetxlog -o 65595 -x1888 -f /database/pgdata/
Transaction log reset

注意在pg10以上的版本中命令为pg_resetwal