将带有标头的竖线分隔文本最简单地导入到 PostgreSQL

将带有标头的竖线分隔文本最简单地导入到 PostgreSQL

我正在尝试创建一个包含多个表的数据库。其中一个表旨在保存来自美国经济普查的约 130 万行数据。数据位于以竖线分隔的文本文件中。这几乎是我第一次使用 PostgreSQL。

我希望使用类似于下面的代码来简单地将所有内容导入为文本。(我暂时决定将所有内容视为字符,因为应该是数字的值都包括缺失值的字母代码等)。但是,COPY 文档说 HEADER 选项仅适用于导入 CSV 文件。

我的最终目标是使用 PostgreSQL 创建此数据的精简版本,以便在 R 中进行分析。但 R 可能会处理大文件,所以我希望在 PostgreSQL 中完成所有预处理,而不是需要第三个工具。我正在寻找一种需要最少的关于导入文件的先验知识和分析的方法。

是否有其他方法可以使用 PostgreSQL 来执行此操作,或者我是否需要使用其他工具删除第一行?

如果我不能使用 HEADER,我假设我需要在 CREATE TABLE 命令中提供列名。这样对吗?

此外,在这种情况下,PostgreSQL 是否会应用默认数据类型,或者尝试确定每列的数据类型,或者其他什么?或者,我可以设置默认数据类型吗?

我在带有 SP1 的 Windows 7 64 位下运行 PostgreSQL 9.3.4。

CREATE DATABASE employ;
CREATE TABLE employ.ec0700a1;
COPY EC0700A1
    FROM 'C:\\Users\\andrewH\\Documents\\OaklandTechEmploymentProject\\Economic Census 2007\\EC07_6-dig_AllGeo\\EC0700A1.dat'
    WITH    DELIMITER '|',
    HEADER TRUE;

答案1

听起来 CSV 应该可以工作。TEXT 和 CSV 格式实际上非常相似。区别主要在于如何解释引号和转义符以及如何处理空值。请参阅文档以获得更准确的描述。

我只是想尝试一下:

COPY EC0700A1
    FROM 'C:\\Users\\andrewH\\Documents\\OaklandTechEmploymentProject\\Economic Census 2007\\EC07_6-dig_AllGeo\\EC0700A1.dat'
    WITH  FORMAT CSV,
    DELIMITER '|',
    HEADER TRUE;

看看它是否有效。如果还有其他问题,请查看该文档页面以寻找解决方案,或者当然,提出另一个问题。

哦,是的,您确实需要命令的列名和数据类型CREATE TABLE。再次查看文档。您需要先创建表,然后才能尝试将数据导入其中。

相关内容