当前位置: 首页 > article >正文

高斯数据库 Shell 脚本:批量执行多个 SQL 文件

高斯数据库 Shell 脚本:批量执行多个 SQL 文件

优化后的高斯数据库 Shell 脚本

#!/bin/bash

# 数据库信息文件路径
DB_INFO_FILE="db_info.txt"

# 要执行的 SQL 文件列表
SQL_LIST_FILE="sql_files.txt"

# 检查数据库信息文件是否存在
if [[ ! -f "$DB_INFO_FILE" ]]; then
    echo "数据库信息文件 $DB_INFO_FILE 不存在!"
    exit 1
fi

# 检查 SQL 文件列表是否存在
if [[ ! -f "$SQL_LIST_FILE" ]]; then
    echo "SQL 文件列表 $SQL_LIST_FILE 不存在!"
    exit 1
fi

# 遍历数据库信息文件
while read -r HOST PORT USER PASSWORD; do
    # 确保读取的字段完整
    if [[ -z "$HOST" || -z "$PORT" || -z "$USER" || -z "$PASSWORD" ]]; then
        echo "数据库信息文件格式不正确,跳过行:$HOST $PORT $USER"
        continue
    fi

    echo "连接到数据库服务器 $HOST:$PORT..."

    # 遍历 SQL 文件列表
    while read -r SQL_FILE; do
        # 检查每个 SQL 文件是否存在
        if [[ ! -f "$SQL_FILE" ]]; then
            echo "SQL 文件 $SQL_FILE 不存在,跳过。"
            continue
        fi

        echo "执行 SQL 文件 $SQL_FILE..."

        # 构造 zsql 命令
        CONNECTION_STRING="${USER}\\${PASSWORD}@${HOST}:${PORT}"
        zsql "$CONNECTION_STRING" -a -f "$SQL_FILE"

        # 检查执行结果
        if [[ $? -eq 0 ]]; then
            echo "SQL 文件 $SQL_FILE 已成功执行到 $HOST:$PORT。"
        else
            echo "SQL 文件 $SQL_FILE 执行到 $HOST:$PORT 失败!"
        fi

        echo "--------------------------------------"
    done < "$SQL_LIST_FILE"

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

每列表示:

  1. 数据库主机名或 IP 地址
  2. 数据库端口号
  3. 用户名
  4. 密码

SQL 文件列表 (sql_files.txt)

此文件包含需要执行的 SQL 文件路径,每行一个文件:

create_table.sql
insert_data.sql
update_schema.sql

示例 SQL 文件

create_table.sql

CREATE TABLE IF NOT EXISTS example_table (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

insert_data.sql

INSERT INTO example_table (name) VALUES ('Alice');
INSERT INTO example_table (name) VALUES ('Bob');
INSERT INTO example_table (name) VALUES ('Charlie');

update_schema.sql

ALTER TABLE example_table ADD COLUMN email VARCHAR(255);
UPDATE example_table SET email = CONCAT(name, '@example.com');

脚本执行方式

  1. 确保脚本有执行权限:

    chmod +x create_table_gaussdb.sh
    
  2. 执行脚本:

    ./create_table_gaussdb.sh
    

脚本功能说明

  1. 读取 db_info.txt 文件:逐行读取数据库服务器的连接信息。
  2. 读取 sql_files.txt 文件:逐行读取 SQL 文件路径。
  3. 检查文件存在性:跳过不存在的 SQL 文件。
  4. 生成连接字符串:根据 USER\\PASSWORD@HOST:PORT 格式构造 GaussDB 的 zsql 连接命令。
  5. 执行多个 SQL 文件:对每个 SQL 文件依次运行。
  6. 结果检查:通过 $? 检查 zsql 命令的执行结果,并在终端打印成功或失败信息。

输出示例

成功执行时,终端会显示类似以下信息:

连接到数据库服务器 192.168.1.100:5432...
执行 SQL 文件 create_table.sql...
SQL 文件 create_table.sql 已成功执行到 192.168.1.100:5432。
--------------------------------------
执行 SQL 文件 insert_data.sql...
SQL 文件 insert_data.sql 已成功执行到 192.168.1.100:5432。
--------------------------------------
执行 SQL 文件 update_schema.sql...
SQL 文件 update_schema.sql 已成功执行到 192.168.1.100:5432。
--------------------------------------
连接到数据库服务器 192.168.1.101:5432...
...

改进点

  1. 支持从文件中批量读取多个 SQL 文件路径。
  2. 针对每个数据库逐个执行所有 SQL 文件。
  3. 灵活性增强,适用于复杂的批处理场景。


http://www.kler.cn/a/505699.html

相关文章:

  • 【Linux】--- 进程的等待与替换
  • vue中的那些事(刷新+key+v-if,v-for)
  • HTML中最基本的东西
  • Linux网络_套接字_UDP网络_TCP网络
  • 【MySQL学习笔记】MySQL视图View
  • 机器学习头歌(第三部分-强化学习)
  • 【线性代数】行列式的性质
  • CISSP一次通过我的经验分享
  • Linux根据Sql文件导入Mysql数据库
  • CentOS 7 下 MySQL 5.7 的详细安装与配置
  • 【IDEA】debug篇
  • 【10】Golang实用且神奇的开发操作总结
  • 【论文阅读】具身人工智能(Embodied AI)综述:连接数字与物理世界的桥梁
  • springboot房屋租赁管理系统
  • Kotlin 极简小抄 P4(for 循环、while 循环、do while 循环、continue 与 break、for 循环标签)
  • O2O同城系统架构与功能分析
  • DNS解析域名简记
  • Oracle查询-in条件超过1000
  • (NIPS-2024)GAN 已死;GAN 万岁!现代基线 GAN
  • Python 上下文管理器:优雅地管理资源
  • 鸿蒙-UIAbility组件生命周期
  • Vue3初学之Element-plus-table组件及分页
  • 【linux】文件与目录命令 - vim
  • linux之进程信号(初识信号,信号的产生)
  • 基于单片机的无线智能窗帘控制器的设计
  • 基于Java+SpringMvc+Vue技术的在线宠物分享平台分享