首页 > 解决方案 > Postgres查询的输出格式不一致

问题描述

我正在为 3 个 varchar(n) 字段查询 Postgres 数据库,如下所示:

Select ("Title","Author","Isbn") from public."Book" Where 1=1

查询的输出是一个包含 3 个字符串的元组。然而,输出的格式有时在记录之间是不一致的。注意查询的输出:

在此处输入图像描述

请注意第 40 行和第 41/42 行之间第一个元素的差异。第 40 行的第一个元素是“Revolutionary Road”(用双引号括起来)。第 41 行的第一个元素是 Neuromancer(没有用引号括起来)。同样的现象也出现在查询集中的其他地方。

我不确定为什么第一个元素有时与查询返回的方式不一致。这不是个人记录本身的问题。还有什么可能是错的?

标签: sqlpostgresql

解决方案


结果是正确的。在这种输出格式中,当字符串有空格或一些特殊字符时,Postgres 使用引号:

postgres=# select row('ahoj', 'ahoj svete', 'ahoj,svete', '"ahoj svete"');
┌───────────────────────────────────────────────────┐
│                        row                        │
╞═══════════════════════════════════════════════════╡
│ (ahoj,"ahoj svete","ahoj,svete","""ahoj svete""") │
└───────────────────────────────────────────────────┘
(1 row)

如果您不想要复合值的输出格式,请不要使用row构造函数:

postgres=# select 'ahoj', 'ahoj svete', 'ahoj,svete', '"ahoj svete"';
┌──────────┬────────────┬────────────┬──────────────┐
│ ?column? │  ?column?  │  ?column?  │   ?column?   │
╞══════════╪════════════╪════════════╪══════════════╡
│ ahoj     │ ahoj svete │ ahoj,svete │ "ahoj svete" │
└──────────┴────────────┴────────────┴──────────────┘
(1 row)

推荐阅读