postgresql 需要在powershell中处理psql错误

wsxa1bj1  于 2023-03-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(219)

我在使用PowerShell和Postgres PSQL命令时遇到了一个小问题。我正在使用PowerShell和\COPY命令将一个.CSV文件加载到postgres DB中。一切正常,但我发现了一个PSQL命令执行错误的案例,原因是.csv格式不正确。不幸的是,即使我尝试捕获PSQL命令,这也没有得到很好的处理我可以减轻错误,但我想找到一种方法来正确处理它,并能够停止进程或拒绝文件的情况下的问题。
这是我的代码:

$Copydatatotable = "\COPY $Load_table_path (account, account_holder, Bank, account_type,......

Write-Host " $Copydatatotable"  

try 
  { 
    psql -h $MyServer -U $MyUid -d $MyDB  -p $MyPort -c $Copydatatotable 
  }        
catch
  {
    Write-Host "  -->  IN CATCH"                                                    
    $Copydatatotable   = "INSERT INTO $Load_process_log_table_not_loaded_path (file_path,.....
    throw $_
    $Try_catch_value = "Y"
  }

这是错误:

#                                                                               #
# STEP 5 - Load file into temporary table                                       #
#                                                                               #
#                                                                               #

 \COPY "temp_load_prod".isabel_transaction (account, account_holder, Bank, account_type,  ......

ERROR:  missing data for column "account_holder"
CONTEXT:  COPY isabel_transaction, line 1284: ""
jdgnovmf

jdgnovmf1#

若要在执行psql命令时处理PowerShell中的错误,可以使用Invoke-Expression cmdlet的-ErrorAction参数指定PowerShell在执行命令时处理错误的方式。可以将-ErrorAction参数设置为“停止”,以便在发生错误时停止脚本执行。
下面是一个如何修改代码以正确处理错误的示例:

$Copydatatotable = "\COPY $Load_table_path (account, account_holder, Bank, account_type,......

Write-Host " $Copydatatotable"

try {
    Invoke-Expression "psql -h $MyServer -U $MyUid -d $MyDB -p $MyPort -c '$Copydatatotable'" -ErrorAction Stop
}
catch {
    Write-Host "  -->  IN CATCH"
    $Copydatatotable = "INSERT INTO $Load_process_log_table_not_loaded_path (file_path,.....
    Write-Error $_.Exception.Message
    $Try_catch_value = "Y"
    # Exit the script or perform any additional error handling here
}

在此示例中,Invoke-Expression cmdlet用于执行psql命令,而-ErrorAction参数设置为"停止“,以便在发生错误时停止脚本执行。然后,catch块用于处理错误并执行任何必要的错误处理或清理。Write-Error cmdlet用于将错误消息输出到错误流,脚本的调用方可以捕获和处理该错误流。

相关问题