遇到一個希望可以幫助我的問題:我想使用 powershell 將 csv 檔案匯入到 postgres。為此撰寫了以下代碼:
$ConnectionString = "Driver={PostgreSQL UNICODE(x64)};Server=$SQLServer;Port=$SLQPort;Database=$SQLDB;Uid=$SQLUser;Pwd=$SQLPass;"
$connection = New-Object System.Data.ODBC.ODBCConnection
$connection.ConnectionString = $ConnectionString
$connection.Open()
$query= "copy sensorhistory from 'C:\Powershell_Scripts\Postgres\Eurogate\data\export.csv' Delimiter ',' csv header;"
$DBCmd = $connection.CreateCommand();
$DBCmd.CommandText = $query
$DBCmd.ExecuteNonQuery() | Out-Null
$DBCmd.ExecuteReader();
但是我收到錯誤“沒有這樣的檔案或目錄”鏈接是正確的并且已經進行了更改以允許所有人訪問,但仍然無法正常作業。歡迎任何幫助
uj5u.com熱心網友回復:
您指向錯誤的檔案系統!
從$SQLServer連接字串中的引數來看,Postgres 可能托管在遠程機器上。
當遇到C:\[...]\export.csv查詢中的檔案路徑時,資料庫引擎會要求作業系統打開相應的檔案,作業系統會“C:\?那是本地驅動器,讓我幫你找到那個檔案” -并且無法找到該檔案,因為您實際上是指計算機C:\上的驅動器。
解決此問題的兩種方法:
1.在查詢中傳遞一個網路路徑:
更新查詢,使檔案路徑明確指向另一臺機器上的檔案共享:
$query = "copy sensorhistory from '\\ClientComputer01\ShareName\path\to\data\export.csv' Delimiter ',' csv header;"
2. 將檔案復制到托管 Postgres 的服務器
當然,如果檔案也存在那里,從本地檔案系統打開檔案不會失敗。假設在環境中配置了 WinRM,并且您在資料庫服務器上具有管理員訪問權限,請提前復制檔案:
$remoteSession = New-PSSession -ComputerName $SQLServer
Copy-Item C:\Powershell_Scripts\Postgres\Eurogate\data\export.csv -Destination C:\Powershell_Scripts\Postgres\Eurogate\data\ -ToSession $remoteSession
或者,如果您對檔案共享具有寫入權限,則通過 SMB 復制檔案:
Copy-Item C:\Powershell_Scripts\Postgres\Eurogate\data\export.csv \\$SQLServer\ShareName\path\to\data\
之后,資料庫引擎將能夠打開檔案的新本地副本,并且您可以在查詢中保留本地檔案路徑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/437317.html
標籤:PostgreSQL 电源外壳
上一篇:SQLAlchemyGIN索引(UUID,JSONB)
下一篇:我在撰寫子查詢時需要幫助
