制作批处理文件运行SQL脚本、实现动态CSV导入及数据库备份
解决方案
一、批处理运行SQL脚本(解决连接问题+确认执行顺序)
- psql执行SQL脚本时默认按从上到下顺序执行,仅在遇到事务回滚或执行异常时中断。
- 批处理文件(
.bat)写法,配置psql连接参数:
@echo off set PGUSER=你的数据库用户名 set PGDATABASE=目标数据库名 set PGSCHEMA=Dibbs :: 执行SQL脚本,指定schema搜索路径 psql -U %PGUSER% -d %PGDATABASE% -v search_path=%PGSCHEMA% -f "你的SQL脚本路径\import_data.sql" pause
- 安全提示:避免明文写密码,可在Windows用户目录下创建
%APPDATA%\postgresql\pgpass.conf,内容格式为localhost:5432:数据库名:用户名:密码,并将文件权限设为只读。
二、导入带当日日期的动态CSV文件
实现方式:批处理传日期变量到SQL脚本
- 批处理文件生成当日日期(格式:YYYYMMDD):
@echo off :: 获取当前日期,格式YYYYMMDD for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a" set "today=%dt:~0,8%" :: 调用psql并传递日期变量 psql -U 用户名 -d 数据库名 -v csv_filename="C:\Users\yuju\SQL_Data\solicitation%today%.csv" -f "import_data.sql"
- 修改SQL脚本,使用传入的变量替换固定文件名:
create temp table "import"( customer_name varchar(1000), Quote_number varchar(1000), Part_number varchar(1000), Order_Status varchar(1000), Bid_Total varchar(20), Unit_Price varchar(20), Customer_Part_number varchar(1000), Most_Recent_Unit_Cost varchar(1000), Most_Recent_Quantity varchar(1000), Total_Potential varchar(1000), Competitors varchar(1000), Solicitation_number varchar(1000), NSN varchar(1000), Date_Accessed date, Closing_Date date, Quantity_Requested varchar(1000), Person_name varchar(1000), Purchase_request_no varchar(1000), RFQ_Forms varchar(1000), Tech_Docs varchar(1000), Tech_Docs_Links varchar(1000), Qualifications varchar(1000), Nomenclature varchar(1000), Reason varchar(1000), Spec_Summary varchar(1000), FAI varchar(1000) ); copy "import" FROM :'csv_filename' DELIMITER ',' CSV HEADER; insert into "Dibbs".dibbs_db (customer_name, quote_number,part_number,order_status,bid_total,unit_price,customer_part_number, most_recent_unit_cost, most_recent_quantity, total_potential, competitors, solicitation_number, nsn_part_number, date_accessed, closing_date, quantity_requested, person_name, pr_number, request_for_quotation_forms, tech_docs, tech_docs_links, qualifications, nomenclature, reason, spec_summary, fai) select * from "import";
- 注意:SQL中引用变量需用
:'csv_filename'格式(单引号包裹变量名),避免路径含空格时出错。
三、数据库备份批处理脚本
@echo off :: 获取当前日期时间,格式YYYYMMDD_HHMMSS for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a" set "backup_date=%dt:~0,8%_%dt:~8,6%" :: 备份整个数据库 pg_dump -U 用户名 -d 数据库名 -f "C:\备份路径\db_backup_%backup_date%.sql" :: 可选:仅备份指定schema :: pg_dump -U 用户名 -d 数据库名 -n Dibbs -f "C:\备份路径\Dibbs_schema_backup_%backup_date%.sql" echo 备份完成,文件:C:\备份路径\db_backup_%backup_date%.sql pause
- 扩展说明:如需压缩备份,可添加
-Fc参数生成自定义格式备份,恢复时使用pg_restore命令。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

