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

一月 27, 2025

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

目录

准备工作

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

posgresql export csv

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

SELECT
	*
FROM
	persons;

输出:

 id | first_name | last_name |    dob     |         email
----+------------+-----------+------------+-----------------------
  1 | John       | Doe       | 1995-01-05 | john.doe@rockdata.net
  2 | Jane       | Doe       | 1995-02-05 | jane.doe@rockdata.net
(2 rows)

我们的表中有两条记录。

使用 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文件中。

id,first_name,last_name,dob,email
3,John,Doe,1995-01-05,john.doe@rockdata.net
4,Jane,Doe,1995-02-05,jane.doe@rockdata.net

在某些情况下,您只想将表中某些列的数据导出到 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;

输出:

first_name,last_name,email
John,Doe,john.doe@rockdata.net
Jane,Doe,jane.doe@rockdata.net

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

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

输出:

email
john.doe@rockdata.net
jane.doe@rockdata.net

请注意,您在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 文件。

了解更多

PostgreSQL 管理