更改数字在 psql 中的打印方式

Change how numbers are printed in psql

如何在psql中设置数字显示格式?
我在 select 查询中有 many character varyingdouble precision 列。我可以在每个数字列上使用 to_char() or round(),但是对于很多列,这会使代码过于重复。

有捷径吗?比如,有没有什么psql session设置,比如\pset numeric '9.9EEEEE'之类的(我自己编的,不要尝试使用)。我无法在手册中快速找到这样的设置:PostgreSQL: Documentation: psql.

示例:

-- Got this:
=# select bar from (values (123456789), (0.123456789), (0.000000123456789)) table_foo (bar);
        bar        
-------------------
         123456789
       0.123456789
 0.000000123456789

-- I have to use this workaround:
=# select to_char(bar, '9.9EEEEE') as bar from (values (123456789), (0.123456789), (0.000000123456789)) table_foo (bar);
   bar    
----------
  1.2e+08
  1.2e-01
  1.2e-07

-- I want this:
-- set some session settings, and then magically:
=# select bar from (values (123456789), (0.123456789), (0.000000123456789)) table_foo (bar);
   bar    
----------
  1.2e+08
  1.2e-01
  1.2e-07

除指定数字区域设置外,没有其他可能指定格式数。值已经在服务器端格式化,psql 格式化为最终输出格式(table、html、csv),但值已格式化,而 psql 没有尝试重新格式化(numericlocale 是一个例外)。我记得关于指定布尔类型输出格式的可能性的长时间讨论,但仍然没有实际结果。 psql 生成富报表的功能不强。它应该是快速、安全和健壮的交互式客户端。虽然我希望在这方面有更大的可能性,但现代电子表格和报告工具更适合某些任务。

您始终可以定义自己的格式化函数,但您必须对很多列进行大量格式化才能将其视为提高可读性。我不会推荐它用于您的玩具示例,但如果您的真实查询有几十列,它可能会更整洁。

sophia=> create function x(numeric) returns text language sql as $$ select to_char(, '9.9EEEEE') $$;
CREATE FUNCTION
sophia=> select x(bar) from (values (123456789), (0.123456789), (0.000000123456789)) table_foo (bar);
    x     
----------
  1.2e+08
  1.2e-01
  1.2e-07
(3 rows)

sophia=>