프로젝트에서 필요해서 작성했던 내용을 기록해둔다.
기본적인 맥락은 아래와 같다.
# [table]
create table mobileap.tbap701 (
seq integer not null,
cgfcd character varying(3) not null
);
위의 DDL문을 아래의 DDL 문으로 변경하는 것
# [foreign table]
create foreign table foreign_schema.tbap701 (
seq integer not null,
cgfcd character varying(3) not null
)
server foreign_server
options (schema_name 'mobileap', table_name 'tbap701');
insert into mobileap.tbap701 select * from foreign_schema.tbap701;
#! /bin/bash
# SQL 파일 경로
sql_file="test2.sql"
#새로운 SQL 파일 생성
extension="${sql_file##*.}"
file_name="${sql_file%.*}"
output_file="${file_name}_modified.${extension}"
touch "$output_file"
# 각 줄에 대한 처리
while IFS= read -r line; do
line=$(echo "$line" | sed 's/ALTER/alter/g')
line=$(echo "$line" | sed 's/CREATE TABLE/create table/g')
if [[ $line =~ "alter" || $line =~ "--" || $line =~ "COMMENT" ]]; then
continue
else
if [[ $line == *"create table"* ]]; then
front=$(echo "$line" | awk -F'.' '{split($1, a, " "); print a[length(a)]}')
back=$(echo "$line" | awk -F'.' '{split($2, a, " "); print a[1]}')
line=$(echo "$line" | sed "s/create table/create foreign table/g")
line=$(echo "$line" | sed "s/$front/foreign_schema/g")
elif [[ $line == *";"* ]]; then
line=$(echo "$line" | sed "s/;/\\nserver foreign_server\\noptions (schema_name '$front', table_name '$back');\\n\\n insert into $front.$back select * from foreign_schema.$back'/g")
fi
echo "$line" >> "$output_file"
fi
done < "$sql_file"
tr -d '\r' < $output_file > result.sql
echo "처리가 완료되었습니다."