PostgreSQL中奇怪的鬼记录 - 它们是什么?

时间:2018-01-14 01:39:52

标签: postgresql psql pgadmin

我的postgresql数据库有一个非常奇怪的问题。我有一张名为"声明"其中有一些奇怪的记录。

使用命令行控制台psql,我查询select * from customer.statement where type in ('QUOTE');并返回12行。 7行看起来很正常,5个缺少除了单个列之外的所有数据,该列是可以为空的列但似乎保持用户输入的实际值。 psql告诉我,即使有12行也会返回7行。其他大多数列都不可为空。奇怪的记录看起来像这样:

select * from customer.statement where type = 'QUOTE';
        id        |    issuer_id     |   recipient_id   | recipient_name | recipient_reference | source_statement_id | catalogue_id | reference | issue_date |  due_date  |                           description                            |   total   | currency | type  | tax_level | rounding_mode |  status   | recall_requested |        time_created        |        time_updated        | time_paid 
------------------+------------------+------------------+----------------+---------------------+---------------------+--------------+-----------+------------+------------+------------------------------------------------------------------+-----------+----------+-------+-----------+---------------+-----------+------------------+----------------------------+----------------------------+-----------
 ... 7 valid records removed ...
                  |                  |                  |                |                     |                     |              |           |            |            | Build bulkheads and sheet with plasterboard.                    +|           |          |       |           |               |           |                  |                            |                            | 
                  |                  |                  |                |                     |                     |              |           |            |            | Patch all patches.                                              +|           |          |       |           |               |           |                  |                            |                            | 
                  |                  |                  |                |                     |                     |              |           |            |            | Set and sand all joints ready for painting.                     +|           |          |       |           |               |           |                  |                            |                            | 
                  |                  |                  |                |                     |                     |              |           |            |            | Use wall angle on bulkhead in main bedroom.                     +|           |          |       |           |               |           |                  |                            |                            | 
                  |                  |                  |                |                     |                     |              |           |            |            | Build nib and sheet and set in entrance                          |           |          |       |           |               |           |                  |                            |                            | 
(7 rows)

如果我使用pgAdmin运行相同的查询,我就不会看到那些奇怪的记录。

有谁知道这些是什么?

1 个答案:

答案 0 :(得分:2)

分隔符前面的加号(+|)表示 psql 中显示的字符串值中的换行符。所以没有额外的行,只有同一行继续换行。报价中的最后一行输出确认了(7 rows)

在pgAdmin中,只要不增加字段的高度(或在某处复制/粘贴内容),就不会看到额外的行,但也有多行。

尝试使用psql和pgAdmin:

test=# SELECT E'This\nis\na\ntest.' AS multi_line, 'foo' AS single_line;
  multi_line  | single_line
--------------+-------------
 This        +| foo
 is          +|
 a           +|
 test.        |
(1 row)

The manual about psql:

  

linestyle

     

将边框线绘图样式设置为asciiold-asciiunicode之一。 [...]默认设置为ascii。 [...]

     

ascii样式使用纯ASCII字符。数据的换行符使用右侧边距中的+符号显示。 [...]