在 postgres 上将表导出为 CSV,而无需使用“文本到列”

Posted

技术标签:

【中文标题】在 postgres 上将表导出为 CSV,而无需使用“文本到列”【英文标题】:Exporting tables to CSV on postgres without having to use 'Text to columns' 【发布时间】:2016-04-20 13:53:13 【问题描述】:

我一直在使用以下脚本从 redshift 和 postgres 导出表:

@export on;
@export set filename="D:\Users\files\filename.csv" CsvColumnDelimiter=";";
SELECT * FROM schemaname.tablename;
@export off;

这很好用,但要在单独的列中获取数据,我必须使用 excel 中的“文本到列”功能。我正在寻找一个可以自动执行“文本到列”步骤的脚本,因为我有 700 多个表。我一直在寻找可以执行此操作的 SQL 和 Python 脚本,但到目前为止还没有找到任何东西。

【问题讨论】:

【参考方案1】:

Excel 需要在 CSV 中使用逗号分隔符。您需要更改分隔符,或更改 Excel 的默认分隔符。您可以在 Region & Language 设置中执行此操作。

【讨论】:

【参考方案2】:

python 有一个内置的 csv 模块。

import csv
with open('in.csv', 'r') as infp:
    with open('out.csv', 'w') as outfp:
        reader = csv.reader(infp, delimiter=';')
        writer = csv.writer(outfp, delimiter=',')
        for row in reader:
            writer.writenow(row)

应该翻译分隔符。详情请查看CSV。

可能有更好的方法来做到这一点。在 Linux 上,有 sed、awk、tr 等可以在一条神秘的行中做到这一点。见 8 examples to change the delimiter of a file in Linux。但我不知道 Windows 等价物,如果有的话。

【讨论】:

以上是关于在 postgres 上将表导出为 CSV,而无需使用“文本到列”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postgresql 上将表格导出为带有标题的 CSV?

sql 将表导出为CSV Postgres SQL

将 Postgres 表导出到 csv

Excel:将工作表导出为 CSV 文件的宏,无需离开我当前的 Excel 工作表

在 iOS 上将数据导出到 XLS(不是通过 CSV)

在 Spring Boot 中使用 Copy 命令从 Postgres 导出数据