postgresql - 如何将从.bat文件中的复制命令返回的错误插入到表中
问题描述
cd C:\Program Files\pgAdmin 4\v5\runtime
psql -h "Hostname" -p "5432" -U "user_name" -d "dbname" -c "\COPY (SELECT * FROM schema_name.table_name) TO "C:\ExportFromStaging\outputfile.csv" WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *, QUOTE '\"', ESCAPE '''',DELIMITER ';')
期待 :
如果命令中发生任何错误copy
,我想在局部变量或表中捕获从数据库八重返回的错误
示例批处理文件:
cd C:\Program Files\pgAdmin 4\v5\runtime
psql -h "Hostname" -p "5432" -U "user_name" -d "dbname" -c "\COPY (SELECT * FROM schema_name.table_name) TO "C:\ExportFromStaging\outputfile.csv" WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *, QUOTE '\"', ESCAPE '''',DELIMITER ';')
if error
then
insert into error_log (error_message,error_time)
values (@ERRROR_RETURNED_FROM_DATABASE_IFCOPPYING_WENT_WRONG,timestamp);
echo @ERRROR_RETURNED_FROM_DATABASE_IF_COPPYING_WENT_WRONG
```
解决方案
我不知道postgress,但我可以冒险解决。从 psql 手册:
如果 psql 正常完成,则返回 0 给 shell,如果发生自己的致命错误(例如内存不足,找不到文件),则返回 1,如果与服务器的连接出错并且会话不是交互式的,则返回 2,如果脚本中发生错误并且设置了变量 ON_ERROR_STOP。
你可以试试:
setlocal EnableDelayedExpansion
rem use double quote if there is space in filename.
cd "C:\Program Files\pgAdmin 4\v5\runtime"
rem psql command.
psql -h "Hostname" -p "5432" -U "user_name" -d "dbname" -c "\COPY (SELECT * FROM schema_name.table_name) TO "C:\ExportFromStaging\outputfile.csv" WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *, QUOTE '\"', ESCAPE '''',DELIMITER ';')
if %ERRORLEVEL% GEQ 1 (
IF %ERRORLEVEL% EQU 1 set "result=psql fatal error."
IF %ERRORLEVEL% EQU 2 set "result=psql connection to the server went bad."
IF %ERRORLEVEL% EQU 3 set "result=psql error occurred in a script: '%ON_ERROR_STOP%'"
echo psql error: [!date! !time!] !result!
:: you can change "timestamp" with variable !date! !time!
:: pseudocode:
:: insert into error_log (error_message,error_time) values ("!result!","!date! !time!");
) else (
IF %ERRORLEVEL% EQU 0 echo psql finished normally.
)
推荐阅读
- ansible - 如何将ansible执行输出重定向到远程主机上的日志文件到指定位置
- asp.net - 当它当前正在执行并为我写出 HTML 时,如何获取我保存代码的文件的完整路径?
- java - 从 Spring 控制器执行 Google Cloud Dataflow 管道
- javascript - 需要通过按钮独立地单击表格的每一行来切换 div。任何人都可以建议使用一些干净的 jquery 吗?
- r - 从 R 中的 UNIX 时间戳中提取年份,仅使用基本包
- reactjs - 将 React 与 Webpack 一起使用时未定义 Moment
- node.js - 如何在没有快递的情况下从服务器发送静态文件
- php - 当我想让用户登录时,我收到“消息”:“未经身份验证”laravel 护照 api
- python - 如何使用 Selenium(Python)在嵌套范围内获取文本?
- python - 如何在使用 Python3 创建一个实例后立即做某事?