postgresql - 如何使用 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] 错误:“”处或附近的语法错误;
谢谢你。
解决方案
我的理解是这\COPY
是一个客户端命令。我希望这意味着psql
只有. 一个通用的 ODBC 提供者不会理解它。
如果您使用Npgsql .Net 客户端,您可能可以使用PosgresSQLCOPY
命令,但该\COPY
命令仅适用于PostgreSQL 客户端psql
。
如果您必须使用 ODBC 连接,最好的办法可能是构建一个带有参数的 INSERT 命令,并一次插入 CSV 文件的每一行。一般来说,这看起来类似于循环内的这个答案,但当然是使用 Powershell 而不是 C#。
推荐阅读
- laravel - 试图获取非对象Laravel 5.4的属性
- android - 将颜色过滤器设置为 Vector Drawable
- maven - 特定代理上的 java 测试失败
- java - TimeTCPClient 和 TimeUDPClient 都超时
- java - 使用 POJOS 多态反序列化 JSON
- oracle-apex - 具有自动完成功能的文本字段
- java - 当我按下按钮时,动作监听器不工作
- r - InvalidArgumentError: indices[127,7] = 43 is not in [0, 43) in Keras R
- python - 输入文件路径并传递给字符串文字
- pandas - Read XML file to Pandas DataFrame