postgres 显示变量_PostgreSQL 13: psql客户端提示符新增%x变量显示事务状态

9c47385fda65fedf52866959cdc20079.png

原文: PostgreSQL 13: psql客户端提示符新增%x变量显示事务状态

PostgreSQL 13 版本的psql客户端提示符新增%x变量显示事务状态,手册说明如下:

手册说明

Add the transaction status (%x) to the default psql prompts (Vik Fearing)

关于%x

psql命令中关于%x变量的解说如下:

%x
Transaction status: an empty string when not in a transaction block, or * when in a transaction block, 
or ! when in a failed transaction block, or ? when the transaction state is indeterminate (for example, because there is no connection).

psql命令中%x变量值为以下: - 如果没在事务中,显示空字符 - 如果在事务中,显示* - 当事务失败,显示! - 当事务状态不确定,显示?

为了更好理解以上内容,先来看看psqlPrompting

关于Prompting

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

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

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

  • %/: 当前的数据库名称。
  • %R: PROMPT1通常为=,如果会话断开,则显示!;PROMPT2中-表示命令等待更多输入,*表示未完成的注释,更多符号解释参考手册。
  • %#: 如果是超级用户则显示#,其他用户显示>,在数据库会话期间,这个值可能因为命令SET SESSION AUTHORIZATION的结果而改变。

PostgreSQL 12 版本的PROMPT1示例如下:

[pg12@ydtf02 ~]$ psql
psql (12.2)
Type "help" for help.

postgres=# SELECT version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)

postgres=#

PROMPT3默认值显示为>>字符,本文不做详细介绍。

PostgreSQL 13 %x 演示

PostgreSQL 12或之前版本PROMPT1PROMPT2的默认值为%/%R%#,PostgreSQL 13 版本的PROMPT1PROMPT2中新增了%x变量,具体为%/%R%x%#

PostgreSQL 13 版本的PROMPT1示例如下:

示例一: 没在事务中

[pg13@ydtf01 ~]$ psql
psql (13beta1)
Type "help" for help.

postgres=#

没在时务中时,%x变量为空,这种情况下13版本和12版本的PROMPT1无差异。

示例二:在事务中

[pg13@ydtf01 ~]$ psql
psql (13beta1)
Type "help" for help.

postgres=# BEGIN;
BEGIN
postgres=*# SELECT now();
              now
-------------------------------
 2020-07-12 19:56:43.312297+08

在事务中时,%x变量显示为*字符。

示例三: 事务失败

[pg13@ydtf01 ~]$ psql
psql (13beta1)
Type "help" for help.

postgres=# BEGIN;
BEGIN
postgres=*# SELECT now();
              now
-------------------------------
 2020-07-12 19:57:57.753642+08
(1 row)

postgres=*# hello;
ERROR:  syntax error at or near "hello"
LINE 1: hello;
        ^
postgres=!#

事务失败时,%x变量显示为!字符。

参考

  • PostgreSQL 13 psql prompts
  • PostgreSQL 12 psql prompts
  • Waiting for PostgreSQL 13 – Add %x to default PROMPT1 and PROMPT2 in psq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值