首页 > 解决方案 > 如何使用 PowerShell 将 CSV 数据复制到 PostgreSQL

问题描述

我是 PowerShell 的新手。我能够建立与我的 PostgreSQL 服务器的连接并执行从现有表中删除数据的操作。我无法执行的是复制语句。下面是我的代码。

$DBConnectionString = "Driver={PostgreSQL UNICODE(x64)};Server=mysvr;Port=5420;Database=mydb;Uid=myuser;Pwd=mypwd;Options='autocommit=off';"
$DBConn = New-Object System.Data.Odbc.OdbcConnection;
$DBConn.ConnectionString = $DBConnectionString;
$DBConn.Open();

$DeleteexistingdataDml3 = "delete from table1;delete from table2;"
$DBCmd = $DBConn.CreateCommand();
$DBCmd.CommandText = $DeleteexistingdataDml3;
$DBCmd.ExecuteReader();

执行复制语句时出现错误。

$Copydatatotable = "\copy table1 FROM '\\filedolder\table1data.csv' DELIMITER AS '|' CSV NULL AS '';
                    \copy table2 FROM '\\filedolder\table2data.csv' DELIMITER AS '|' CSV NULL AS '';"
$DBCmd = $DBConn.CreateCommand();
$DBCmd.CommandText = $Copydatatotable;
$DBCmd.ExecuteReader();

错误:

使用“0”参数调用“ExecuteReader”的异常:“错误 [42601] 错误:“”处或附近的语法错误;

谢谢你。

标签: postgresqlpowershell

解决方案


我的理解是这\COPY是一个客户端命令。我希望这意味着psql 只有. 一个通用的 ODBC 提供者不会理解它。

如果您使用Npgsql .Net 客户端,您可能可以使用PosgresSQLCOPY命令,但该\COPY命令仅适用PostgreSQL 客户端psql

如果您必须使用 ODBC 连接,最好的办法可能是构建一个带有参数的 INSERT 命令,并一次插入 CSV 文件的每一行。一般来说,这看起来类似于循环内的这个答案,但当然是使用 Powershell 而不是 C#。


推荐阅读