PostgreSQL 教程: 将表导出到 CSV 文件

九月 15, 2023

摘要:在本教程中,您将学习将数据从 PostgreSQL 表导出到 CSV 文件的各种技术。

目录

准备工作

在上一个教程中,我们向您展示了如何将数据从 CSV 文件导入到表中。我们将使用我们为了从 CSV 文件导入数据创建的persons表。

posgresql export csv

我们来检查一下persons表的数据。

SELECT
	*
FROM
	persons;

posgresql import csv from pgAdmin tool persons table

我们的表中有两条记录。

使用 COPY 语句从表导出数据到 CSV 文件

将表数据导出到 CSV 文件的最简单方法是使用COPY语句。例如,如果要将persons表的数据导出到C:\tmp文件夹中名为persons_db.csv的 CSV 文件中,可以使用以下语句:

COPY persons TO 'C:\tmp\persons_db.csv' DELIMITER ',' CSV HEADER;

PostgreSQL 会将persons表中所有列的所有数据导出到persons_db.csv文件中。

postgresql export csv

在某些情况下,您只想将表中某些列的数据导出到 CSV 文件。为此,您可以在COPY关键字后指定表名称和列名称。例如,以下语句将persons表的first_namelast_nameemail列中的数据导出到person_partial_db.csv

COPY persons(first_name,last_name,email) 
TO 'C:\tmp\persons_partial_db.csv' DELIMITER ',' CSV HEADER;

postgresql export csv partially

如果您不想导出包含表的列名的标题,只需删除COPY语句中的HEADER标志即可。以下语句仅将personsemail列中的数据导出到 CSV 文件。

COPY persons(email) 
TO 'C:\tmp\persons_email_db.csv' DELIMITER ',' CSV;

postgresql export csv partially without header

请注意,您在COPY命令中指定的 CSV 文件名必须由服务器直接写入。这意味着 CSV 文件必须驻留在数据库服务器计算机上,而不是您的本地计算机上。CSV 文件还需要可由运行 PostgreSQL 服务器的用户写入。

使用\copy命令从表导出数据到 CSV 文件

如果您有权访问远程 PostgreSQL 数据库服务器,但没有足够的权限写入其上的文件,则可以使用 psql 内置命令\copy

\copy命令基本上运行上面的COPY语句。但是,不是服务器写入 CSV 文件,而是 psql 将数据从服务器传输到本地文件系统,写入 CSV 文件。要使用\copy命令,您只需要对本地计算机有足够的权限。它不需要 PostgreSQL 超级用户权限。

例如,如果要将persons表的所有数据导出到persons_client.csv文件中,可以从psql客户端执行\copy命令,如下:

\copy (SELECT * FROM persons) to 'C:\tmp\persons_client.csv' with csv

在本教程中,我们向您展示了如何使用COPY语句和\copy命令从表导出数据到 CSV 文件。