九月 15, 2023
摘要:在本教程中,您将学习将数据从 PostgreSQL 表导出到 CSV 文件的各种技术。
目录
准备工作
在上一个教程中,我们向您展示了如何将数据从 CSV 文件导入到表中。我们将使用我们为了从 CSV 文件导入数据创建的persons
表。
我们来检查一下persons
表的数据。
SELECT
*
FROM
persons;
我们的表中有两条记录。
使用 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
文件中。
在某些情况下,您只想将表中某些列的数据导出到 CSV 文件。为此,您可以在COPY
关键字后指定表名称和列名称。例如,以下语句将persons
表的first_name
、last_name
和email
列中的数据导出到person_partial_db.csv
。
COPY persons(first_name,last_name,email)
TO 'C:\tmp\persons_partial_db.csv' DELIMITER ',' CSV HEADER;
如果您不想导出包含表的列名的标题,只需删除COPY
语句中的HEADER
标志即可。以下语句仅将persons
表email
列中的数据导出到 CSV 文件。
COPY persons(email)
TO 'C:\tmp\persons_email_db.csv' DELIMITER ',' CSV;
请注意,您在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 文件。