pg服务管理 与 psql常用命令

一、 服务启停与创建

1. 服务启动

启动方法

  • 直接运行postgres进程启动
  • 使用pg_ctl命令
#直接运行postgres进程启动
postgres -D $PGDATA &

#使用pg_ctl命令
pg_ctl -D $PGDATA start

在Linux 7可以配置/usr/lib/systemd/system/postgresql.service文件,以systemctl命令启动pg,但这种方法本质上跟使用pg_ctl是一样的,参考

linux - Systemd postgresql start script - Unix & Linux Stack Exchange

单用户模式

在启动pg服务时添加 --single参数,常用的一种情况是,当记录年龄离2^31还有100万时,db将阻止用户连接,此时就需要启动到单用户模式执行vacuum

postgres --single -D $PGDATA &

2. 服务停止

停止模式

  • smart shutdown(相当于Oracle normal模式):不允许新连接,待已有连接全部结束后关闭数据库
  • fast shutdown(相当于Oracle immediate模式):不允许新连接,向所有活跃的服务进程发送SIGTERM信号让它们立即退出,之后等待所有子进程退出并关闭数据库
  • immediate shutdown(相当于Oracle abort模式):不允许新连接,主进程postgres向所有子进程发送SIGQUIT信号并且立即退出,所有子进程也会立即退出。下次启动时会redo wal日志进行实例恢复

信号类型

  • SIGTERM:对应smart shutdown模式
  • SIGINT:对应fast shutdown模式
  • SIGQUIT:对应immediate shutdown模式

停止方法

  • 直接向postgres主进程发送signal信号
  • 使用pg_ctl命令
#直接向postgres主进程发送signal信号
kill -TERM `head -1 /PGDATA目录/postmaster.pid`
kill -INT `head -1 /PGDATA目录/postmaster.pid`
kill -QUIT `head -1 /PGDATA目录/postmaster.pid`

#使用pg_ctl命令
pg_ctl stop -D $PGDATA -m smart
pg_ctl stop -D $PGDATA -m fast
pg_ctl stop -D $PGDATA -m immediate

3. 重启pg

pg_ctl stop -D $PGDATA -m fast
pg_ctl start -D $PGDATA

#快速重启
pg_ctl -D $PGDATA restart -m fast

4. pg_ctl功能

  • 初始化pg实例
  • 启动、终止、重启pg服务
  • 查看pg服务状态
  • reload配置文件
  • 向指定进程发送信号

5. 查看控制文件内容

#不用加控制文件名
pg_controldata

二、 psql常用命令

1. 常用元命令

  • \h      查看sql语法
  • \?      命令行操作的帮助
  • Tab键可以补全目录
  • \i sql文件     执行sql文件
  • \l      列出所有的数据库
  • \dn     列出所有schema
  • \db     显示所有表空间(pg中的表空间是一个目录,表放在表空间相当于将表的数据文件放到该目录之下)
  • \d     查看当前schema 中所有的表、视图、序列
  • \d+   同上,但是多额外信息,下面几个命令都有带+版,能看到更详细的信息
  • \d schema.obj   查看对象结构(相当于desc)
  • \dt     只显示匹配的表
  • \di     只显示匹配的索引
  • \ds     只显示序列
  • \dv     只显示视图
  • \df      只显示函数

  • \sf 函数名   查看函数定义
  • \du 或 \dg   列出数据库中所有角色或用户(pg中是一样的)
  • \dp 或 \z 表名   显示表的权限分配情况
  • \x      横纵显示切换 (类似mysql \G)
  • \dT+   显示扩展类型相关属性及描述
  • \q      退出pg命令行
  • \z 或 \dp 表名    显示表的权限分配情况
  • \timing    显示执行时间
  • \watch 5    每五秒循环执行sql语句
  • \c dbname      切换数据库
  • \conninfo   查看连接信息
  • \echo 字符串  输出一行信息
  • \encoding 字符集名      设置客户端字符集
  • \set [NAME [VALUE]]    设置内部变量,不加参数则列出内部变

pg服务管理 与 psql常用命令_第1张图片

  •  set search to schema   切换schema

2. 常用参数

非交互模式执行脚本

psql -f file_path/file_name

非交互模式执行SQL

psql -d db_name -c "sql语句1;sql语句2;sql语句3;"

ssl连接

psql -h连接串  \ "user=root dbname=postgres sslmode=require"

查看版本

psql -V 
psql -c "select version()"

执行os命令

\! ls
\cd /tmp

传变量

\set v_id 2
select * from test where id=:v_id;
#或
psql -v v_id=1 mydb pguser -f select.sql

-t只显示输出结果,-A去除尾部空行(shell脚本取结果常用)

psql -At -c "sql" 

获取psql中命令实际执行的sql:在启动时加入 -E 或执行 \set ECHO_HIDDEN on

psql -E mydb pguser

关闭pg的自动提交(AUTOCOMMIT不能小写)

\set AUTOCOMMIT off

三、 其他psql命令

可以作为参考

 1. psql参数

基本语法 支持参数 参数含义
psql 连接参数 -h 数据库服务器的主机名或IP
-p 数据库服务器的端口号
-U 连接该数据库服务器时使用的数据库用户
-w 连接服务器时不需要输入用户密码
-W 连接服务器时需要输入用户密码
通用参数 -c 执行单一SQL命令
-d 指定要连接的数据库
-f sql脚本文件
-l 输出服务器中的所有数据库名
-v 设置psql的变量,形如 -v PARAMETER=VALUE
-V 输出版本信息
-X 不读取启动文件~/.psqlrc
-1(one) 以单一事务执行命令文件
-? 显示帮助信息
输入输出参数 -a 显示所有来自脚本的输入
-b 回显失败的命令
-e 回显发送给服务器的命令
-E 回显内部命令产生的查询
-L 指定会话日志文件
-n 禁用增强命令行编辑功能(readline)
-o 将查询结果输出到文件或Linux管道
-q 静默方式运行(只输出结果,不显示消息)
-s 单步模式,该模式下需要对每个命令进行确认
-S 单行模式,该模式下一行就是一条 SQL 命令
输出格式参数 -A 非对齐表格输出模式
-F 为字段设置分隔符,用于不整齐的输出,缺省为"|"
-H HTML表格输出模式
-P 设置将变量打印到参数的选项(查阅 \pset 命令)
-R 为不整齐的输出设置行分隔符(默认:换行符号)
-t 只打印记录
-T 设定HTML表格标记属性(例如,宽度,边界)
-x 打开扩展表格输出
-z 为不整齐的输出设置字段分隔符为字节0
-O 为不整齐的输出设置行分隔符为字节0

2. 元命令

功能 命令 命令作用
获取帮助 \? [commands] 显示元命令帮助说明
\? options 显示psql命令的帮助信息
\? variables 显示psql变量的帮助信息
\h [commands] 显示SQL命令的帮助信息
一般性 \copyright 显示PostgreSQL的发行和使用条款
\g [file] 执行命令,然后将结果输出到文件
\gset [PREFIX] 执行命令,然后以psql变量存储结果
\q 退出psql
\watch [sec] 每个[SEC]秒,重复执行sql命令
查询 \d[S+] 列出当前数据库中的表、视图、序列
\da[S] 列出聚合函数
\db[+] 列出表空间
\dc[S+] 列出字符转码函数
\dC[+] 列出类型转换函数
\dd[S] 列出对象描述
\ddp 列出缺省权限
\dD[S+] 列出域
\det[+] 列出foreign table
\des[+] 列出foreign server
\deu[+] 列出用户映射
\dew[+] 列出foreign data wrapper
\df[antw][S+] 列出[聚合/常规/触发器/窗口]函数
\dF[+] 列出文本检索配置
\dFd[+] 列出文本检索字典
\dFp[+] 列出文件检索解析器
\dFt[+] 列出文件检索模板
\dg[+] 列出角色
\di[S+] 列出索引
查询 \dl     列出大对象
\dL[S+] 列出所有过程语言
\dm[S+] 列出所有物化视图
\dn[S+] 列出所有模式
\do[S]  列出所有操作符
\dO[S+] 列出所有排序规则
\dp     列出表、视图、序列的访问权限
\drds  列出每个数据库的角色定义
\ds[S+] 列出序列
\dt[S+] 列出表
\dT[S+] 列出数据类型
\du[S+] 列出角色
\dv[S+] 列出视图
\dE[S+] 列出外部表
\dx[+]  列出扩展
\dy     列出事件触发器
\l[+]   列出数据库
\sf[+]  列出指定函数的定义
\z      等同于\dp
连接  \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] 在psql下,以指定用户连接到指定端口服务器的数据库
\encoding [ENCODING] 设置客户端编码
\password [USERNAME]  安全的设置用户密码
\conninfo 显示当前连接的相关信息
操作系统 \cd [DIR] 切换工作目录
\setenv NAME [VALUE] 设置/清空环境变量
\timing [on|off] 是否开启命令计时命令
\! [COMMAND] 执行操作系统命令
内置变量 \prompt [TEXT] NAME 提示用户设置内置变量
\set [NAME [VALUE]] 设置内置变量
\unset NAME  重置变量
输入输出 \copy ... 执行copy命令,将数据流发送到客户端主机
\echo [STRING] 标准屏幕输出指定字符串
\i FILE  执行操作系统脚本
\ir FILE   与\i
\o [FILE]  将查询结果输出到指定文件
\qecho [STRING] 用法类似\o,将字符串写到查询输出流
缓存区 \e [FILE] [LINE]  使用外部编辑器编辑查询缓存区(或文件)
\ef [FUNCNAME [LINE]] 使用外部编辑器编辑函数定义
\p 显示查询缓存区的内容
\r  重置(清除)查询缓存区
\s [FILE] 显示历史记录或将历史记录保存在文件中
\w FILE 将查询缓存区的内容写入文件
输出格式 \a 在非对齐模式和对齐模式之间切换
\C [STRING] 设置表的标题,如果没有的标题就取消
\f [STRING] 显示或设定非对齐模式查询输出的字段分隔符
\H  切换为HTML输出模式 (缺省关闭)
\pset [NAME [VALUE]] 设置表输出选项
\t [on|off] 只显示记录 (缺省关闭)
\T [STRING] 设置HTML <表格>标签属性, 如果没有的话取消设置
\x [on|off|auto]  切换扩展输出模式(缺省关闭)

 

参考

PGCE课程《psql使用》

psql元素周期表

你可能感兴趣的:(PostgreSQL,脚本&命令,postgresql,psql,元命令,启动关闭)