Maj*_*imi 106 postgresql psql
我写了一个脚本来REINDEX索引数据库中的索引。这是其中之一:
echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
问题是我无法在独立模式下运行此脚本。psql每次运行都提示输入密码。还有两个限制:
我无法在没有密码的数据库上创建用户。
因为REINDEX锁表,我应该sleep <num>在每个REINDEX.
有没有自动解决方案?
a_h*_*ame 152
关于密码提示,您有四种选择:
pdm*_*pdm 32
一个简单的例子PGPASSWORD将是这样的:
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
小智 5
根据您的帐户权限,未指定数据库的示例可能会失败,因为会根据您连接到的数据库检查用户权限。最好也明确指定数据库。
# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME
# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME -d YOUR_DATABASE
Run Code Online (Sandbox Code Playgroud)
在Windows中,您可以在系统范围内设置它:
SETx PGPASSWORD YourPassword /M
Run Code Online (Sandbox Code Playgroud)
或者为了安全起见,如果您不想在系统范围内使用它,您可以一行登录:
set PGPASSWORD=YourPassword&& psql -d database -U user
Run Code Online (Sandbox Code Playgroud)