高斯数据库 Shell 脚本:批量执行 SQL 文件
优化后的高斯数据库 Shell 脚本
#!/bin/bash# 数据库信息文件路径
DB_INFO_FILE="db_info.txt"# 要执行的 SQL 文件
SQL_FILE="create_table.sql"# 检查数据库信息文件是否存在
if [[ ! -f "$DB_INFO_FILE" ]]; thenecho "数据库信息文件 $DB_INFO_FILE 不存在!"exit 1
fi# 检查 SQL 文件是否存在
if [[ ! -f "$SQL_FILE" ]]; thenecho "SQL 文件 $SQL_FILE 不存在!"exit 1
fi# 遍历数据库信息文件
while read -r HOST PORT USER PASSWORD; do# 确保读取的字段完整if [[ -z "$HOST" || -z "$PORT" || -z "$USER" || -z "$PASSWORD" ]]; thenecho "数据库信息文件格式不正确,跳过行:$HOST $PORT $USER"continuefiecho "连接到数据库服务器 $HOST:$PORT..."# 构造 zsql 命令CONNECTION_STRING="${USER}\\${PASSWORD}@${HOST}:${PORT}"zsql "$CONNECTION_STRING" -a -f "$SQL_FILE"# 检查执行结果if [[ $? -eq 0 ]]; thenecho "SQL 文件已成功执行到 $HOST:$PORT。"elseecho "SQL 文件执行到 $HOST:$PORT 失败!"fiecho "--------------------------------------"done < "$DB_INFO_FILE"
数据库信息文件 (db_info.txt
)
此文件包含数据库服务器信息,每行一个实例:
192.168.1.100 5432 myuser mypassword
192.168.1.101 5432 myuser mypassword
192.168.1.102 5432 myuser mypassword
每列表示:
sql_69">SQL 文件 (create_table.sql
)
示例 SQL 文件,内容如下:
sql">CREATE TABLE IF NOT EXISTS example_table (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
脚本执行方式
-
确保脚本有执行权限:
chmod +x create_table_gaussdb.sh
-
执行脚本:
./create_table_gaussdb.sh
脚本功能说明
- 读取
db_info.txt
文件:逐行读取数据库服务器的连接信息。 - 生成连接字符串:根据
USER\\PASSWORD@HOST:PORT
格式构造 GaussDB 的zsql
连接命令。 - 执行 SQL 文件:通过
-f
参数指定 SQL 文件路径,并在服务器上运行。 - 结果检查:通过
$?
检查zsql
命令的执行结果,并在终端打印成功或失败信息。
输出示例
成功执行时,终端会显示类似以下信息:
连接到数据库服务器 192.168.1.100:5432...
SQL 文件已成功执行到 192.168.1.100:5432。
--------------------------------------
连接到数据库服务器 192.168.1.101:5432...
SQL 文件已成功执行到 192.168.1.101:5432。
--------------------------------------
连接到数据库服务器 192.168.1.102:5432...
SQL 文件已成功执行到 192.168.1.102:5432。
--------------------------------------
改进点
- 移除了
DATABASE
参数,直接对服务器执行 SQL 文件。 - 兼容无数据库名称的执行方式。
- 保持脚本灵活性,可根据不同环境快速调整。