PostgreSQL 命令行工具介绍

文章目录

    • 前言
      • [1. 连接数据库](#1. 连接数据库)
        • [1.1 psql 本地连接](#1.1 psql 本地连接)
        • [1.2 psql 远程连接](#1.2 psql 远程连接)
        • [1.3 指定客户端字符集](#1.3 指定客户端字符集)
      • [2. pg_ctl 管理命令](#2. pg_ctl 管理命令)
        • [2.1 初始化数据库](#2.1 初始化数据库)
        • [2.2 启动数据库](#2.2 启动数据库)
        • [2.3 加载配置文件](#2.3 加载配置文件)
        • [2.4 查看数据库状态](#2.4 查看数据库状态)
      • [3. 数据库信息查看](#3. 数据库信息查看)
        • [3.1 查看数据库版本](#3.1 查看数据库版本)
        • [3.2 查看数据库的启动时间](#3.2 查看数据库的启动时间)
        • [3.3 查看配置文件 load 时间](#3.3 查看配置文件 load 时间)
        • [3.4 查看当前连接用户](#3.4 查看当前连接用户)
        • [3.5 查看修改参数](#3.5 查看修改参数)
        • [3.6 查看数据库大小](#3.6 查看数据库大小)
        • [3.7 查看表大小](#3.7 查看表大小)
      • [4. 常见用法](#4. 常见用法)
        • [4.1 执行外部文件](#4.1 执行外部文件)
        • [4.2 编辑模式](#4.2 编辑模式)
        • [4.3 列显示模式](#4.3 列显示模式)

前言

psql 是 PostgreSQL 自带的命令行交互客户端工具,类似于 MySQL 的 mysql -u -p 不过相当于 MySQL 的命令行工具 psql 功能更丰富些,例如单击 tab 自动补全。本篇文章介绍 psql 的使用及常用命令

1. 连接数据库

1.1 psql 本地连接

已经安装好 PostgreSQL 直接输入 psql 即可连接到数据库:

bash 复制代码
[postgres@db4 data]$ psql
psql (12.2)
Type "help" for help.

postgres=# 

为什么不用输入用户名和密码呢?安装 PostgreSQL 时,会创建一个数据库初始化时与操作系统用户同名的 super 账号,在本地 OS 用户下登陆数据库时,因为执行的是操作系统认证,所以不需要用户和密码,这块也可以在 pg_hba.cnf 中配置。

bash 复制代码
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust

1.2 psql 远程连接

使用 psql 连接远程的 PostgreSQL:

bash 复制代码
[postgres@db4 data]$ psql -h 172.16.104.56 -p 5432 -U abc -W 
Password: 
psql (12.2)
Type "help" for help.

abc=> 

涉及的连接参数:

bash 复制代码
Connection options:
  -h, --host=HOSTNAME      database server host or socket directory (default: "local socket")
  -p, --port=PORT          database server port (default: "5432")
  -U, --username=USERNAME  database user name (default: "postgres")
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)

1.3 指定客户端字符集

当客户端字符集与服务器字符集不一致时,就会出现乱码,可使用下方命令切换客户端字符集:

sql 复制代码
\encoding gbk

2. pg_ctl 管理命令

除了 psql 还有一个 pg_ctl 管理命令也是 DBA 经常要使用的命令,在此也介绍一下用于 初始化、重启、加载配置文件等。

2.1 初始化数据库

只在安装阶段使用的命令,初始化数据库。

sql 复制代码
pg_ctl init[db] [-D datadir] [-s] [-o initdb-options]

2.2 启动数据库

启动(start)、关闭(stop)、重启(restart) 数据库,如果没有指定参数,将从环境变量 /etc/profile 中读取:

sql 复制代码
pg_ctl [动作] [-D datadir] [-l filename]

2.3 加载配置文件

修改配置文件后,重新加载配置文件:

sql 复制代码
pg_ctl reload [-D datadir] [-s]

2.4 查看数据库状态

bash 复制代码
pg_ctl status [-D datadir]

3. 数据库信息查看

3.1 查看数据库版本

sql 复制代码
select version();
bash 复制代码
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit

3.2 查看数据库的启动时间

sql 复制代码
select pg_postmaster_start_time();
bash 复制代码
   pg_postmaster_start_time    
-------------------------------
 2023-09-14 14:41:24.890359+08

通过数据库的启动时间,可以判断数据库是否发生过重启中断。

3.3 查看配置文件 load 时间

bash 复制代码
select pg_conf_load_time();
bash 复制代码
       pg_conf_load_time       
-------------------------------
 2023-09-14 14:41:24.849112+08

使用 pg_ctl reload 或重启数据库会触发配置文件重新加载,改时间会更新。

3.4 查看当前连接用户

bash 复制代码
select user;

3.5 查看修改参数

查看参数:

sql 复制代码
-- 下面两个命令都可以
show [参数名];

select current_setting('参数名');

修改参数:

sql 复制代码
set [参数名] to '改后值';

3.6 查看数据库大小

bash 复制代码
 select pg_size_pretty(pg_database_size('mydb'));

3.7 查看表大小

sql 复制代码
-- 仅查看表大小,不包含索引大小
select pg_size_pretty(pg_relation_size('pgbench_accounts'));
sql 复制代码
-- 包含索引大小
select pg_size_pretty(pg_total_relation_size('pgbench_accounts'));

4. 常见用法

4.1 执行外部文件

与 MySQL 中的 source 命令作用一样:

bash 复制代码
\i 文件名.sql

还有一种方法 psql -x -f 文件名.sql

bash 复制代码
psql -d postgres -x -f 文件名.sql

4.2 编辑模式

进入编辑模式,与 MySQL edit 命令一样,SQL 特别长的场景下可以使用编辑模式:

bash 复制代码
\e

4.3 列显示模式

与 MySQL \G 一样,不过 psql 执行前需要先打开:

bash 复制代码
postgres=# \x
Expanded display is on.

postgres=# \d

List of relations
-[ RECORD 1 ]------------
Schema | public
Name   | pgbench_accounts
Type   | table
Owner  | postgres
-[ RECORD 2 ]------------
Schema | public
Name   | pgbench_branches
Type   | table
Owner  | postgres
-[ RECORD 3 ]------------
Schema | public
Name   | pgbench_tellers
Type   | table
Owner  | postgres
-[ RECORD 4 ]------------
Schema | public
Name   | v_locks_monitor
Type   | view
Owner  | postgres
相关推荐
开***能40 分钟前
降本增效双突破:Profinet转Modbus TCP助力包布机产能与稳定性双提升
数据库·网络协议·tcp/ip
广州智造5 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥8 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸9 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai12310 小时前
Redis解析
数据库·redis·缓存
数据库幼崽10 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd10 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou11 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh11 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵12 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁