如何修改psql中\timing命令的时间输出格式?
解决psql中\timing输出时间小数分隔符为逗号的问题
在psql里用\timing on查看SQL执行时间时,输出的时间格式默认用逗号当小数分隔符(例如Time: 0,475 ms),想改成点分隔的标准格式,但尝试修改数据库会话LC参数的操作没效果,执行的代码如下:
\timing off SET LC_MESSAGES TO 'pt_BR.UTF-8'; SET LC_MONETARY TO 'pt_BR.UTF-8'; SET LC_NUMERIC TO 'pt_BR.UTF-8'; SET LC_TIME TO 'pt_BR.UTF-8'; \timing on SELECT 1+1; \timing off SET LC_MESSAGES TO 'en_US.UTF-8'; SET LC_MONETARY TO 'en_US.UTF-8'; SET LC_NUMERIC TO 'en_US.UTF-8'; SET LC_TIME TO 'en_US.UTF-8'; \timing on SELECT 1+1;
问题原因
你之前修改的是数据库会话层面的LC参数,但psql的\timing输出格式是由客户端(psql程序本身)的locale环境决定的,和数据库端设置无关,所以之前的操作无效。
解决方法
方法1:启动psql时指定环境变量(临时生效)
直接在启动psql的命令行里设置LC_NUMERIC,比如:
LC_NUMERIC=en_US.UTF-8 psql -d 你的数据库名称
启动后再执行\timing on和SQL语句,输出的时间就会用点作为小数分隔符,比如Time: 0.475 ms。
方法2:修改psql配置文件(永久生效)
编辑用户目录下的.psqlrc文件(没有的话直接新建),添加一行:
\setenv LC_NUMERIC en_US.UTF-8
保存后,每次启动psql都会自动应用这个设置,无需手动指定环境变量。
方法3:当前psql会话内临时设置(仅本次会话生效)
在psql会话中执行:
\setenv LC_NUMERIC en_US.UTF-8
然后重启\timing:
\timing off \timing on
之后执行SQL的时间输出就会切换为点分隔的格式。
内容的提问来源于stack exchange,提问作者Peter Krauss
相关产品推荐
相关产品推荐

