MST

星途 面试题库

面试题:Bash脚本对数据库数据进行批量插入与事务处理

假设有一个文本文件data.txt,每行记录了用户的姓名和年龄,格式为'姓名 年龄'。要求编写Bash脚本,将这些数据批量插入到PostgreSQL数据库的users表中(表结构为name VARCHAR(50), age INT),并且在插入过程中使用事务处理,确保数据的完整性。如果插入过程中有任何错误,回滚整个事务。
27.7万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

以下是实现该需求的Bash脚本:

#!/bin/bash

# 数据库连接信息
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database"
DB_HOST="your_host"
DB_PORT="your_port"

# 临时文件,用于存储处理后的数据
TMP_FILE=$(mktemp)

# 从data.txt文件中提取数据并格式化
while read line; do
    name=$(echo $line | awk '{print $1}')
    age=$(echo $line | awk '{print $2}')
    echo "('$name', $age)" >> $TMP_FILE
done < data.txt

# 构建插入语句
INSERT_STATEMENT="BEGIN; INSERT INTO users (name, age) VALUES "
INSERT_STATEMENT+=$(cat $TMP_FILE | paste -sd ',')
INSERT_STATEMENT+="; COMMIT;"

# 执行插入语句
psql -U $DB_USER -d $DB_NAME -h $DB_HOST -p $DB_PORT -c "$INSERT_STATEMENT" 2>/dev/null

# 检查插入是否成功
if [ $? -eq 0 ]; then
    echo "数据插入成功"
else
    echo "数据插入失败,事务已回滚"
fi

# 删除临时文件
rm $TMP_FILE

请将脚本中的your_usernameyour_passwordyour_databaseyour_hostyour_port替换为实际的数据库连接信息。此脚本通过事务处理确保数据的完整性,如果插入过程中出现任何错误,事务将自动回滚。