在Cygwin中编写连接psql的Shell脚本执行耗时问题咨询
解决Cygwin bash中psql脚本执行缓慢的问题
直接执行简单SELECT查询正常,但通过Shell脚本调用\i导入SQL文件时速度慢,可从以下几个方向排查优化:
先排除SQL脚本本身的性能问题
直接在psql交互环境里执行\i 'path_to_file/test.sql';,观察耗时是否和脚本执行时一致。如果单独执行也慢,说明问题出在SQL语句本身——比如缺少索引、全表扫描、大事务等,需要针对性优化SQL逻辑。替换localhost为127.0.0.1
Cygwin下localhost可能触发DNS解析延迟,把连接参数里的--host=localhost改成--host=127.0.0.1,跳过DNS解析步骤,减少连接建立的耗时。简化psql调用方式
避免使用Here Document,直接用psql的-f参数指定SQL文件,减少Shell的额外处理开销,修改后的脚本如下:#!/bin/sh psql --host=127.0.0.1 --port=5432 --dbname=mydb --username=usr_name -f path_to_file/test.sql禁用psql的交互特性
添加-n参数禁用readline功能,添加-q参数启用安静模式,减少不必要的输出和交互处理,进一步提升速度:#!/bin/sh psql -n -q --host=127.0.0.1 --port=5432 --dbname=mydb --username=usr_name -f path_to_file/test.sql确认使用Cygwin版psql
检查当前psql是否是Cygwin包管理(如apt-cyg)安装的版本,而非Windows系统自带的PostgreSQL客户端。Windows版exe在Cygwin环境中运行可能存在兼容性开销,执行which psql查看路径,确保路径在Cygwin的/usr/bin或类似目录下。减少IO输出开销
如果不需要SQL执行的输出,可以把输出重定向到/dev/null,避免大量IO操作拖慢速度:#!/bin/sh psql -n -q --host=127.0.0.1 --port=5432 --dbname=mydb --username=usr_name -f path_to_file/test.sql >/dev/null 2>&1
内容的提问来源于stack exchange,提问作者Udayasoorian CN
相关产品推荐
相关产品推荐

