[PostgreSQL] 일반 테이블 DDL 문 foreign table DDL로 변경하는 Shell script

Ja L·2024년 2월 19일
0

[PostgreSQL] Operation

목록 보기
28/39

프로젝트에서 필요해서 작성했던 내용을 기록해둔다.

기본적인 맥락은 아래와 같다.

# [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;

Shell Script


#! /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 "처리가 완료되었습니다."
profile
DB Engineer

0개의 댓글

관련 채용 정보