【问题标题】:How to copy CSV data to PostgreSQL using PowerShell如何使用 PowerShell 将 CSV 数据复制到 PostgreSQL
【发布时间】:2021-06-03 15:31:25
【问题描述】:

我是 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] 错误:“”处或附近的语法错误;

谢谢。

【问题讨论】:

  • 错误是什么?将错误消息添加到您的问题中。
  • 现在更新了错误的问题
  • 你能在 Postgres 中做同样的事情吗?如果有,有什么不同?
  • 复制语句在命令提示符下工作正常,因为它使用 PSQL 实用程序。

标签: postgresql powershell


【解决方案1】:

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

如果您使用Npgsql .Net client,您可能可以使用the PosgresSQL COPY command,但\COPY 命令适用于the PostgreSQL client psql only

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

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多