如何打印PostgreSQL表输出,以便区分空字符串和null。

11

有没有办法在进行查询时配置psql或传递某些参数,以打印出null和空字符串的不同值?当前它对两者都显示为空。

例如,我有一个包含以下内容的表:

adventure=# select * from account
adventure-# ;
 user_id | username | password | email |         created_on         |         last_login         
---------+----------+----------+-------+----------------------------+----------------------------
       1 |          |          |       | 2020-04-07 10:30:08.836098 | 2020-04-07 10:30:08.836098
(1 row)

由此,我无法确定用户名是空字符串还是null。在这种情况下,用户名为null,但密码为空字符串。

我尝试使用\x on,但效果相同。

当然,我可以进行一些合并,但如果我需要对每个列都这样做,那就太麻烦了。

2个回答

23

psql 中,你可以通过配置选项 null 进行操作,该选项可以使用 \pset 进行更改。

postgres=# \pset null '<null>'
Null display is "<null>".
postgres=# select null as c1, '' as c2;
   c1   | c2
--------+----
 <null> |
如果您想永久选择该选项,您可以将\pset命令放入.psqlrc文件中。

0

您可以使用coalesce()NULL值替换为其他内容:

select coalesce(username, '<null user>') as username,
       coalesce(password, '<null password>') as password

或者,如果您想为空字符串包括第三个值,请使用case

select (case when username is null then '<null user>'
             when username = '' then '<empty user>'
             else username
        end)

当然,如果密码是<null password>,那么它看起来就像NULL值。

或者,您可以将值用引号括起来:

select '"' || username || '"' as username

|| 操作符在值为NULL时返回NULL


是的,我提到过我可以这样做,但在有很多这种情况下,我想只需执行 select *。此外,我认为这可能会成为非 varchar 字段类型(如日期)的问题。 - Kristijan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接