【问题标题】:PSQL to CSV with column alias leads to corrupted file具有列别名的 PSQL 到 CSV 导致文件损坏
【发布时间】:2017-01-26 11:20:51
【问题描述】:

我设法在 Windows 上使用 PSQL 将 SQL 查询直接导出到 CSV 文件中,只要我不使用别名重新定义列名(使用 AS),一切正常。

但只要我使用列别名,例如:

\copy (SELECT    project AS "ID" FROM    mydb.mytable WHERE  project > 15 ORDER BY project)  TO 'C:/FILES/user/test_SQL2CSV.csv' DELIMITER ',' CSV HEADER

CSV 文件出现意外行为。

  • 在 Excel 中:CSV 已损坏且为空白
  • 在记事本中:数据存在,但没有分隔符或空格 (连续,例如 ID27282930...)
  • 在 Notepad++ 中:数据在列中组织良好

(例如

ID
27
28
29
30
...

)

有什么办法可以直接在 Excel 中读取导出的文件(当我不使用别名时会发生这种情况)?

【问题讨论】:

标签: excel postgresql csv copy psql


【解决方案1】:

在测试了查询的各种其他配置后,我发现了问题。显然,Excel 将以“ID”开头的文件解释为某种 SYLK 格式而不是 CSV……将列别名重命名为例如“MyID”解决了这个问题。

参考这里:annalear.ca/2010/06/10/why-excel-thinks-your-csv-is-a-sylk

【讨论】:

  • 是的,那是我们的老朋友 Excel。请注意,只有这两个字符ID 会导致这种“损坏”; Excel 可以读取引用的变体(即文件/标题以 "ID",... 开头的位置)。如果你能设法在标题中强制引用(我从未在 PostgreSQL 的 COPY 命令中尝试过)。
  • 不错的提示,可能会有所帮助,但主要问题不是保留该特定标签,而是让别名正常工作。只是运气不好,excel 功能:') 还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多