首页 > 解决方案 > 如何使用 Windows 批处理脚本将 PostgreSQL 查询结果导出到 csv 文件(不使用“\COPY”)

问题描述

我想使用 Windows 批处理脚本将 PostgreSQL 查询结果导出到 csv 文件中(不使用“\COPY”,因为它正在创建权限问题)。我目前正在使用以下脚本执行 psql 脚本并以 PIPE("|") 分隔格式写入文件。

@echo off setlocal set PGPASSWORD='MyPassword' "psql.exe" -h myIP -p myPORT -U myUSER -d myDB -t -o "D:\Test\myfile.csv" -f D:\Raihan\Test\my_sql_script.sql

SQL 文件(mysql_script.sql): SELECT ID,NAME from MYTABLE

该代码正在将文件(myfile.csv)作为管道分隔符写入如下所示,每个管道后有一个额外的空格(这是我也面临的另一个问题)

 1| Raihan
 2| Kalu
 3| Param

我可以使用下面的脚本轻松地用逗号(,)替换管道和空格,但我的问题是它需要大量时间,因为它正在逐行转换。

FOR /F "usebackq tokens=1-2 delims=| " %%I in (D:\Test\myfile.csv) DO echo %%I,%%J >> D:\Test\myfile_2.csv

使用上述脚本无法按时转换数百万数据。

编辑:我使用了下面的代码

\COPY (select * from some_table) TO 'D:/tmp/some_file.csv' CSV HEADER;

这是给出错误

psql:D:/Raihan/Test/test_sql.sql:2: ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone. Press any key to continue . . .

注意:我的数据库服务器位于运行批处理文件的另一台服务器中。如果我可以运行 /COPY 而不是超级用户,它也将解决我的问题。

标签: postgresqlpowershellbatch-fileexport-to-csvpsql

解决方案


推荐阅读