【灵活设置PostgreSQL的PROMPT1客户端提示符】

news/2024/7/9 20:20:21 标签: postgresql, 数据库

Prompting是指psql的客户端提示符,有三个变量:PROMPT1, PROMPT2, ROMPT3,具体区别如下:

  • PROMPT1: 当psql等待新命令发出时的常规提示符,PROMPT1最常见。
  • PROMPT2: 在命令输入过程中等待更多输入时发出的提示符,例如当命令没有使用分号终止或者引用没有被关闭时就会发出这个提示符。
  • PROMPT3: 在运行一个COPY FROM STDIN命令,并且需要在终端上输入一个行值时发出的提示符。

官网的解释如下:

Prompting

The prompts psql issues can be customized to your preference. The three variables PROMPT1PROMPT2, and PROMPT3 contain strings and special escape sequences that describe the appearance of the prompt. Prompt 1 is the normal prompt that is issued when psql requests a new command. Prompt 2 is issued when more input is expected during command entry, for example because the command was not terminated with a semicolon or a quote was not closed. Prompt 3 is issued when you are running an SQL COPY FROM STDIN command and you need to type in a row value on the terminal.

PROMPT1和PROMPT2的默认设置值一样,默认值都为%/%R%#,这三个字符的解释如下:

  • %/: 当前的数据库名称。
  • %R: PROMPT1通常为=,如果会话断开,则显示!;PROMPT2中-表示命令等待更多输入,*表示未完成的注释。
  • %#: 如果是超级用户则显示#,其他用户显示>。

一、常用的提示符

PROMPT1和PROMPT2可以设置的一些常用的提示符如下,也可以参考官网PostgreSQL: Documentation: 13: psql

%>   端口
%p   当前连接的后端的进程ID。
%M   数据库服务器的完整主机名
%m   数据库服务器的主机名,在第一个点处截断
%n   数据库会话用户名。(在数据库会话期间,该值的扩展可能会因命令的结果而发生变化SET SESSION AUTHORIZATION。)
%/   当前数据库的名称。
%#   如果会话用户是数据库超级用户,则为 a #,否则为>。(在数据库会话期间,该值的扩展可能会因命令的结果而发生变化SET SESSION AUTHORIZATION。)
%p   当前连接的后端的进程ID。

二、灵活设置PROMPT1的一些例子

PROMPT1最常见。设置psql启动时执行的命令,可以把如下的\set …相关命令加入.psqlrc。定义在 psql 启动时自动运行的命令,更改提示显示并设置别名。

但是不建议设置过多,设置过多反而臃肿了。一行的提示的显示就占了大半行。

有时候使用gdb调试PostgreSQL的时候,需要根据pid去attach对应连接。这个时候如果我们增加了%p的变量,这样pid就直接在前边提示符里打印出来了,就不需要再去查询pg_backend_pid();获取pid了。同时也可以在前边加上%n得到当前连接使用的用户

postgres=#  \set PROMPT1 '%/(ConnAs[%n]:PID[%p])%R# '
postgres(ConnAs[postgres]:PID[24683])=#
postgres(ConnAs[postgres]:PID[24683])=#

也可以加上系统的时间

postgres=# \set PROMPT1 '%/(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"`)%R# '
postgres(ConnAs[postgres]:PID[24618] 2024-02-01/15:26:34)=#
postgres(ConnAs[postgres]:PID[24618] 2024-02-01/15:26:35)=#
postgres(ConnAs[postgres]:PID[24618] 2024-02-01/15:26:36)=#

加上 postgrers server的版本

postgres=#  \set PROMPT1 '%/<%:SERVER_VERSION_NAME:>(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"`)%R# '
postgres<16.1>(ConnAs[postgres]:PID[25950] 2024-02-01/15:34:26)=#
postgres<16.1>(ConnAs[postgres]:PID[25950] 2024-02-01/15:34:27)=#

甚至可以使用返引号加上一些自定义的东西进去,例如把PGDATA的变量打印进去。

postgres=# \set PROMPT1 '%/<%:SERVER_VERSION_NAME:>(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"` %`echo $PGDATA`)%R# '
postgres<16.1>(ConnAs[postgres]:PID[26909] 2024-02-01/15:40:10 /home/postgres/data-16)=#
postgres<16.1>(ConnAs[postgres]:PID[26909] 2024-02-01/15:40:12 /home/postgres/data-16)=#

或者在进行某些测试的时候,临时更改这个显示,例如我把pg_xlog下的xlog数量加到这个里边,便于我每次进入的时候,都能看到它的数量,直接回车也可以看到

postgres@ubuntu-linux-22-04-desktop:~$ cd $PGDATA/pg_wal
postgres@ubuntu-linux-22-04-desktop:~/data-16/pg_wal$ ls
000000010000000000000038  000000010000000000000039  00000001000000000000003A  archive_status
postgres@ubuntu-linux-22-04-desktop:~/data-16/pg_wal$ psql
psql (16.1)
Type "help" for help.

postgres=#  \set PROMPT1 '%/<%:SERVER_VERSION_NAME:>(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"` pg_wal_count:%`ls $PGDATA/pg_wal|grep -v archive_status| wc -l`)%R# '
postgres<16.1>(ConnAs[postgres]:PID[28068] 2024-02-01/15:46:42 pg_wal_count:3)=#

再或者结合psql可以把数据库里查询到的东西作为前边的显示选项,例如把活跃连接数加到前边。(只不过有点笨,可能没必要,可以结合需求来。而且不建议设置那种执行时间比较长的SQL,否则可能造成性能问题,具体以实际环境为准,可以设置一些秒出,较简单的SQL)

postgres=#  \set PROMPT1 '%/<%:SERVER_VERSION_NAME:>(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"` conn_count:%`psql -c" select count(*) from pg_stat_activity where state=\'active\';" -tAq`)%R# '
postgres<16.1>(ConnAs[postgres]:PID[30521] 2024-02-01/15:58:53 conn_count:1)=#
postgres<16.1>(ConnAs[postgres]:PID[30521] 2024-02-01/15:59:21 conn_count:2)=#

http://www.niftyadmin.cn/n/5363820.html

相关文章

牛客周赛Round31-小白感悟

第一题 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 小红拿到了一个字符串,她发现这个字符串可能是她自己的名字"kou",于是想将其替换成小紫的名字"yukari"。你能帮帮她吗? 签到题很简单 c++版 #include<iostream> using namesp…

Sketch使用手册:从入门到精通的完整教程

Sketch软件是Mac平台上流行的矢量图形编辑软件&#xff0c;旨在帮助用户创建网站、移动应用、图标等各种设计原型。Sketch软件的设计风格简洁明了&#xff0c;界面操作简单易用&#xff0c;非常适合UI/UX设计师、平面设计师等数字创意人员。本文将根据如何使用Sketch&#xff0…

vue绘制语音波形图---wavesurfer.js

文章目录 创建实例optionsmethod接收Blob流 https://wavesurfer.xyz/ 创建实例 引入插件&#xff1a;import WaveSurfer from "wavesurfer.js"创建实例对象&#xff1a;this.wavesurfer WaveSurfer.create(options); <div id"waveform"><!-- t…

day20网页基本标签

网页基本标签 标题标签段落标签换行标签水平线标签字体样式标签注释和特殊符号 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网页基本标签</title> </head> <body> <!--标题…

SpringFramework实战指南(五)

SpringFramework实战指南(五) 4.3 基于 注解 方式管理 Bean4.3.1 实验一: Bean注解标记和扫描 (IoC)4.3.2 实验二: 组件(Bean)作用域和周期方法注解4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)4.3.5 实验五:…

动画渲染案例 | 《舒克贝塔·五角飞碟》欢乐开年,经典IP唤醒童年回忆

《舒克贝塔五角飞碟》是由杭州童话大王影视有限公司、天津猫眼微影文化传媒有限公司出品&#xff0c;郑亚旗执导和编剧的动画电影。蓝海创意云为该片提供了渲染服务。电影于2023年12月30日正式上映&#xff0c;上映不到一个月时间累计票房突破5000万大关&#xff0c;并被评为“…

Swift 入门之自定义类型的模式匹配(Pattern Matching)

概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样&#xff0c;在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中&#xff0c;模式匹配&#xff08;Pattern …

UG949 适用于 FPGA 和 SoC 的UltraFast 设计方法指南

使用RTL创建设计 定义RTL设计层级 模块边界输出进行寄存 即寄存器输出&#xff0c;打一拍 IP的使用 AMBA AXI