您现在的位置是:首页 >学无止境 >postgresql|数据库|批量执行SQL脚本文件的shell脚本网站首页学无止境
postgresql|数据库|批量执行SQL脚本文件的shell脚本
简介postgresql|数据库|批量执行SQL脚本文件的shell脚本
前言:
对于数据库的维护而言,肯定是有SQL脚本的执行,例如,某个项目需要更新,那么,可能会有很多的SQL脚本需要执行,SQL脚本可能会包含有建表,插入数据,索引建立,约束建立,主外键建立等等内容。
那么,几个SQL脚本可能无所谓,navicat或者psql命令行 简简单单的就导入了,但是有的时候脚本会比较多并且有的时候脚本会有执行顺序要求,很显然,navicat会力不从心的,一个个点SQL文件导入也会有遗漏的情况,因此,编写一个可自动执行SQL脚本文件的shell脚本就显得很有必要了。
下面,将就以上需求,编写一个可用的,通用的批量导入SQL脚本。
一,
SQL脚本的内容
#!/bin/bash
#!author zsk
set -eu
#describe 该脚本是批量导入SQL语句的脚本。
#set -eu是检查脚本内的变量,防止空参的情况出现。
#如果SQL脚本遇到错误,将会立刻停止,主要是参数-v ON_ERROR_STOP=1的作用
#变量 $1 是SQL脚本的存放路径,没有对SQL脚本文件的检查,因此,请确定输入的目录正确性
# 该脚本限定运行在非root用户,也就是普通用户下,在执行SQL脚本的同时输出logs文件在普通用户根目录下
#如果有任何错误,可查看日志文件并结合该脚本的控制台输出查找问题并及时解决。
#以下是五个变量,按需要修改即可。
sql_file=`ls $1|grep sql |sort -n`
database=test
pg_user=postgres
port=5432
pwd=$1
mkdir -p $pwd/success
sqlfile_success=$pwd/success
#这个是批量执行SQL文件的入口函数,日志文件放置在了postgresql用户的根目录
#如果有SQL脚本执行失败,脚本将会停止,如果SQL脚本执行成功,将会打印成功执行的SQL脚本名称
#成功执行的脚本将被移动到脚本所在目录下的success目录下,将执行失败的脚本原因找到后
#可再次从失败的SQL脚本执行,等于断点执行。
sql1 ()
{
echo $sql_file
for i in $sql_file
do psql -U$pg_user -p$port -d $database -v ON_ERROR_STOP=1 -f $pwd$i 2>&1 >>~/logs
if [ $? -eq 0 ]
then
echo -e "