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

Postgresql 更改数字在psql中的打印方式,postgresql,floating-point,format,rounding,psql,Postgresql,Floating Point,Format,Rounding,Psql,如何在psql中设置数字显示格式? 我在select查询中有许多字符变化和双精度列。我可以在每个数字列上使用或,但是对于许多列,这使得代码过于重复 有捷径吗?例如,是否有任何psql会话设置,类似于\pset numeric'9.9EEEEE'(我只是编出来的,不要尝试使用它)。我无法在手册中快速找到此类设置: 示例: -- Got this: =# select bar from (values (123456789), (0.123456789), (0.000000123456789))

如何在
psql
中设置数字显示格式?

我在
select
查询中有许多
字符变化
双精度
列。我可以在每个数字列上使用或,但是对于许多列,这使得代码过于重复

有捷径吗?例如,是否有任何
psql
会话设置,类似于
\pset numeric'9.9EEEEE'
(我只是编出来的,不要尝试使用它)。我无法在手册中快速找到此类设置:

示例:

-- 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
将其格式化为最终输出格式(表、html、csv),但值已格式化,
psql
不尝试重新格式化(
numericaleoge
是一个例外)。我记得关于指定布尔类型输出格式的可能性的长期讨论,但仍然没有实际结果
psql
没有生成丰富报告的强大功能。它应该是快速、安全和健壮的交互式客户端。虽然我希望在这方面有更强的可能性,但现代电子表格和报告工具更适合某些任务。

您可以随时定义自己的格式化功能,但您必须对许多列进行大量格式化,才能将其视为可读性的改进。我不建议您将其用于玩具示例,但如果您真正的查询有几十列,则可能会更整洁

sophia=> create function x(numeric) returns text language sql as $$ select to_char($1, '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=> 

数据在服务器端格式化。psql只是打印已经格式化的文件text@PavelStehule似乎是
numericlocale
在客户端格式化数字数据。。。作为所有数据类型的
格式
。这是以文本形式重新格式化已格式化的数字。您可以在源代码文件
print.c
中检查函数
format\u numeric\u locale(const char*my\u str)
。对不起,您不需要任何东西。提供多少橡皮点都不会使此功能实现。但是你可以为
psql
写一个补丁,或者花钱请人帮你做。