티스토리 뷰

SQL

PostgreSQL 백업 및 복원

문타리 2022. 6. 7.

Prerequsite

  • Postgresql 설치 (https://www.postgresql.org/)
  • path 설정 추가 (C:\Program Files\PostgreSQL\13\bin\)
  • PowerShell 기반 명령어
  • Azure Database for PostgreSQL 사용
  • 🚀 원본 DB 데이터 백업 > Owner 변경 > 새로운 DB에 복원

(원본 DB) 백업

⭐ 스키마와 데이터 따로 백업

$date = (Get-Date).ToString("yyyyMMdd")
$version = 1
$env:PGPASSWORD = "Pass123!@#"
pg_dump -h "testapp-db.postgres.database.azure.com" -p "5432" -d "testapp" -U "testapp" -f "c:\\postgresql_backup\\testapp-schema-$date-$version.sql" -v -s
pg_dump -h "testapp-db.postgres.database.azure.com" -p "5432" -d "testapp" -U "testapp" -f "c:\\postgresql_backup\\testapp-data-$date-$version.sql" -v -a

Schema 백업 파일에서 Owner 변경 (testapp 👉 testappnew)

  • c:\\postgresql_backup\\testapp-schema-$date-$version.sql 파일 vscode 로 열어서 Text Replace (testapp 👉 testappnew)
  • testappnew-schema-$date-$version.sql 로 저장

복원

$date = (Get-Date).ToString("yyyyMMdd")
$version = 1
$env:PGPASSWORD = "Pass123!@#"
psql -h "testapp-db.postgres.database.azure.com" -U "testappnew" -d "testappnew" -v sslmode="require" -f "c:\\postgresql_backup\\testappnew-schema-$date-$version.sql"
psql -h "testapp-db.postgres.database.azure.com" -U "testappnew" -d "testappnew" -v sslmode="require" -f "c:\\postgresql_backup\\testapp-data-$date-$version.sql"

추가 작업

DB 정보 확인

psql "host=testapp-db.postgres.database.azure.com port=5432 user=testapp password=Pass123\!\@\# sslmode=require"
postgres=> \l+

DB 생성

일반적인 방법

$env:PGPASSWORD = "Pass123!@#"
psql -h "testapp-db.postgres.database.azure.com" -p "5432" -U testapp
CREATE USER testappnew WITH ENCRYPTED PASSWORD 'testappnew!!';
GRANT testappnew TO testapp;
CREATE DATABASE testappnew OWNER testappnew ENCODING 'utf-8';

DB 삭제 후 생성

$env:PGPASSWORD = "Tlwps123!@#"
psql -h "testapp-db.postgres.database.azure.com" -p "5432" -U testapp -c "DROP DATABASE testappnew;"
psql -h "testapp-db.postgres.database.azure.com" -p "5432" -U testapp -c "CREATE DATABASE testappnew OWNER testappnew ENCODING 'utf-8';"

기존 계정으로 생성 (DB 생성 여부도 체크)

$env:PGPASSWORD = "Pass123!@#"
if (psql -h "testapp-db.postgres.database.azure.com" -p "5432" -U testapp -tc "SELECT CASE WHEN COUNT(*) = 1 THEN 'EXIST' ELSE 'NOT EXIST' END FROM pg_database WHERE datname = 'testappnew'" | select-string -q "NOT EXIST") {
  psql -h "testapp-db.postgres.database.azure.com" -p "5432" -U testapp -c "CREATE DATABASE testappnew OWNER testapp ENCODING 'utf-8';"
}

'SQL' 카테고리의 다른 글

PostgreSQL Cheet Sheet  (0) 2021.10.12
댓글