-
PostgreSQL 백업 및 복구 - Tool 사용PostgreSQL 2019. 11. 22. 14:52
이 문서에서는 툴을 사용해 PostgreSQL의 데이터를 백업 및 복구에 대해 설명한다.
이와 관련된 툴에 대해 조사를 하고, 이 툴들을 비교한 내용을 작성한다.
조사된 툴에 대해 상세 설명을 추가하고, 실행한 예제를 작성한다.
관련 툴 목록
github 검색에 "PostgreSQL backup"이라고 입력해서 찾는다.
기능 비교
툴명 PostgreSQL 지원 버전 GUI/CLI PITR 스토리지 지원
wal-e >= 8.4 CLI O AWS S3, Azure, Google Cloud, OpenStack Swift, File System
wal-g CLI AWS S3 PGHoard >= 9.2 CLI O AWS S3, Azure, Google Cloud, OpenStack Swift, Ceph Barman >= 8.3 CLI O File System pgBackRest >= 8.3 CLI AWS S3, File System OmniPITR CLI O File System pg_rman >= 8.4 CLI O File System pgBackMan >= 9.0 and <= 9.6
>= 9.2 for the pgbackman database
CLI X File System pgAdmin4
>= 9.2 GUI 확인필요
https://www.pgadmin.org/docs/pgadmin4/dev/add_restore_point_dialog.html#add-restore-point-dialog
File System 조사된 툴에 대해 상세 설명은 해당 문서를 참고한다.
예제로 사용할 툴은 wal-e와 pgAdmin4이다.
다음은 fedora 27 환경에서 실행되었다. 다른 환경을 사용한다면 실행 및 결과가 달라질 수 있다.
wal-e에 대한 예제는 다음과 같다.
우리는 wal-e 예제에서 몇가지 wal-e 명령어를 사용할 것이다.여기서 사용할 명령어는 backup-push, backup-fetch, wal-push, wal-fetch이다.
backup-push: data 백업
backup-fetch: data 복구
wal-push: wal 백업
wal-fetch: wal 복구
여기서 사용하지는 않지만 추가적으로 backup-list, delete 명령어가 있다.
backup-list: wal-e 명령어로 만든 백업을 목록으로 볼 때 사용
delete: wal-e 명령어로 만든 백업을 삭제할 때 사용
이 예제에서 참고한 자료는 다음과 같다.
wal-e 참고 문서: https://github.com/wal-e/wal-e#file-system
wal-e 예제 참고 문서: https://gist.github.com/elithrar/8682235
pyenv 설치 참고 문서: https://tuwlab.com/ece/26135
PostgreSQL 데이터를 wal-e 툴을 사용하여 PITR을 할 수 있다.
wal-e 툴을 사용하기 위해 pyenv와 envdir, pv 툴이 필요하다.
- wal-e는 python 3.4 이상이 필요하다. 만약 python 3.4 이전 버전이 설치되어 있다면 python 버전을 스위칭 하면서 사용할 수 있는 pyenv 툴을 사용한다.
- wal-e는 secret data를 환경변수에 등록하지 않는 것을 추천하기 때문에 필요한 환경 변수를 설정하기 위해 envdir 툴을 사용한다.
wal-e를 이용해 PostgreSQL DB 데이터를 백업 및 복구하는 예제는 다음과 같다.
- pyenv, python 3.5, envdir, wal-e 툴을 설치한다.
- wal-e에서 사용할 환경 변수를 설정한다.
- 테스트를 위해 File System(AWS S3, Azure, Google Storage, Swift 등이 있음)을 사용한다.
- 백업은 data 백업과 wal 백업을 나눠서 한다.
- data 백업
- backup-push 명령어 예: envdir /etc/wal-e.d/env wal-e backup-push <data 폴더 절대 경로>
- wal 백업
- postgresql.conf 파일의 다음 옵션을 설정한다.
- wal-level = archive
- archive_mode = on
- archive_command = 'envdir /etc/wal-e.d/env wal-e backup-push %p'
- archive_timeout = 60
- postgresql.conf 파일의 다음 옵션을 설정한다.
- data 백업
- 복구는 data 복구와 wal 복구를 나눠서 한다.
- data 복구
- backup-fetch 명령어 예: envdir /etc/wal-e.d/env wal-e backup-fetch <새롭게 사용할 data 폴더 절대 경로> LATEST
- LATEST는 backup-list 명령어를 통해 나열된 마지막 백업 이름으로 대체된다.
- backup-fetch 명령어 예: envdir /etc/wal-e.d/env wal-e backup-fetch <새롭게 사용할 data 폴더 절대 경로> LATEST
- wal 복구는 <새롭게 사용할 data 폴더 절대 경로>에 recovery.conf 파일을 생성하고, 이 파일에 restore_command와 recovery_target_time 옵션을 추가해 PIRT 복구가 가능하다.
- restore_command 옵션 예: restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch %f %p'
- recovery_target_time 옵션 예: recovery_target_time = '2018-05-14 16:31:00'
- data 복구
다음은 위 시나리오에 대한 실행 결과이다.
-
pyenv, python 3.5, envdir, wal-e 툴을 설치한다.
pyenv
--사전 설치
$ dnf install lzop pv
--pyenv 설치
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
-- .bashrc에 다음을 추가한다.
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
-- .bashrc 적용
$ source .bashrc
python 3.5
--python 3.5.0 버전 설치
$ pyenv install 3.5.0
--만약 설치중 다음과 같은 오류가 발생하면 compat-openssl10-devel 설치
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
$ dnf remove openssl-devel
$ dnf install compat-openssl10-devel
--사용할 버전 변경
$ pyenv global 3.5.0
--버전 확인
$ pyenv versions
system
* 3.5.0 (set by /home/bylee/.pyenv/version)
envdir
--envdir 설치
$ pip install envdir
Collecting envdir
Downloading https://files.pythonhosted.org/packages/75/dd/817dc77edf4807fc2c29e28046ab83aa7ccfe27e79d24ca37d7aaa1e36bb/envdir-1.0.1-py2.py3-none-any.whl
Installing collected packages: envdir
Successfully installed envdir-1.0.1
You are using pip version 7.1.2, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
wal-e
--wal-e 설치
$ pip install wal-e
Collecting wal-e
Downloading https://files.pythonhosted.org/packages/d6/73/b210a8900d4fc8ef4e5b919f96358cdddcb2b909fcd81bf673b3c7f08aa6/wal-e-1.1.0.tar.gz (92kB)
100% |████████████████████████████████| 94kB 509kB/s
Collecting gevent>=1.1.1 (from wal-e)
Downloading https://files.pythonhosted.org/packages/1b/92/b111f76e54d2be11375b47b213b56687214f258fd9dae703546d30b837be/gevent-1.2.2.tar.gz (3.1MB)
100% |████████████████████████████████| 3.1MB 220kB/s
Collecting greenlet>=0.4.10 (from gevent>=1.1.1->wal-e)
Downloading https://files.pythonhosted.org/packages/13/de/ba92335e9e76040ca7274224942282a80d54f85e342a5e33c5277c7f87eb/greenlet-0.4.13.tar.gz (58kB)
100% |████████████████████████████████| 61kB 2.3MB/s
Installing collected packages: greenlet, gevent, wal-e
Running setup.py install for greenlet
Running setup.py install for gevent
Running setup.py install for wal-e
Successfully installed gevent-1.2.2 greenlet-0.4.13 wal-e-1.1.0
You are using pip version 7.1.2, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
- wal-e에서 사용할 환경 변수를 설정한다.
-
테스트를 위해 File System(AWS S3, Azure, Google Storage, Swift 등이 있음)을 사용한다.
환경 설정
--envdir의 File System 설정 예
--file://localhost/home/bylee/dev/stolon-test/backup/wal-e/ 경로에 AG data 백업와 AG wal 백업이 저장된다.
$ sudo mkdir -p /etc/wal-e.d/env
$ sudo echo 'file://localhost/home/bylee/test/wal-e/' > /etc/wal-e.d/env/WALE_FILE_PREFIX
$ sudo chown -R bylee:bylee /etc/wal-e.d
-
- 백업은 data 백업 후 wal 백업을 한다.
- data 백업: wal-e의 backup-push 명령어를 사용해여 백업
-
wal 백업: postgresql.conf 파일을 설정하여 백업
--wal 백업
$ initdb
$ vi $PGDATA/postgresql.conf
wal-level = archive
archive_mode = on
archive_command = 'envdir /etc/wal-e.d/env wal-e backup-push %p'
archive_timeout = 60
$ pg_ctl start
$ psql -d postgres
--wal 백업 확인
$ cd /home/bylee/test/wal-e
$ ll
...
drwxrwxr-x. 2 bylee bylee 4096 5월 14 14:16 wal_005
--data 백업
$ envdir /etc/wal-e.d/env wal-e backup-push /home/bylee/install/pg/data/
wal_e.main INFO MSG: starting WAL-E
DETAIL: The subcommand is "backup-push".
STRUCTURED: time=2018-05-14T07:27:39.540365-00 pid=25011
wal_e.operator.backup INFO MSG: start upload postgres version metadata
DETAIL: Uploading to file://localhost/home/bylee/test/wal-e/basebackups_005/base_000000010000000000000002_00000040/extended_version.txt.
STRUCTURED: time=2018-05-14T07:27:49.320101-00 pid=25011
wal_e.operator.backup INFO MSG: postgres version metadata upload complete
STRUCTURED: time=2018-05-14T07:27:49.321561-00 pid=25011
wal_e.worker.upload INFO MSG: beginning volume compression
DETAIL: Building volume 0.
STRUCTURED: time=2018-05-14T07:27:49.346325-00 pid=25011
wal_e.worker.upload INFO MSG: begin uploading a base backup volume
DETAIL: Uploading to "file://localhost/home/bylee/test/wal-e/basebackups_005/base_000000010000000000000002_00000040/tar_partitions/part_00000000.tar.lzo".
STRUCTURED: time=2018-05-14T07:27:49.610067-00 pid=25011
wal_e.worker.upload INFO MSG: finish uploading a base backup volume
DETAIL: Uploading to "file://localhost/home/bylee/test/wal-e/basebackups_005/base_000000010000000000000002_00000040/tar_partitions/part_00000000.tar.lzo" complete at 38896.8KiB/s.
STRUCTURED: time=2018-05-14T07:27:49.724792-00 pid=25011
--data 백업 확인 1
$ cd /home/bylee/test/wal-e
$ ll
drwxrwxr-x. 3 bylee bylee 4096 5월 14 16:27 basebackups_005
--data 백업 확인 2
$ envdir /etc/wal-e.d/env wal-e backup-list
wal_e.main INFO MSG: starting WAL-E
DETAIL: The subcommand is "backup-list".
STRUCTURED: time=2018-05-14T07:34:12.082096-00 pid=28562
name last_modified expanded_size_bytes wal_segment_backup_start wal_segment_offset_backup_start wal_segment_backup_stop wal_segment_offset_backup_stop
base_000000010000000000000002_00000040 2018-05-14T07:27:50.822055 000000010000000000000002 00000040
- 복구는 data 복구 후 wal 복구한다.
- data 복구는 backup-fetch 명령어로 복구가 가능하다.
- backup-fetch 명령어 예: envdir /etc/wal-e.d/env wal-e backup-fetch /home/bylee/test/wal-e/data LATEST
-
- LATEST는 backup-list 명령어를 통해 나열된 마지막 백업 이름으로 대체된다.
- wal 복구는 /home/bylee/test/wal-e/data에 recovery.conf 파일을 추가하고, 이 파일에 restore_command와 recovery_target_time 옵션을 추가해 PIRT 복구가 가능하다.
- restore_command 옵션 예: restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch %f %p'
-
recovery_target_time 옵션 예: recovery_target_time = '2018-05-14 16:31:00'
--시점 복구를 위해 데이터 삽입
$ psql -d postgres
--data 복구
$ envdir /etc/wal-e.d/env wal-e backup-fetch /home/bylee/test/wal-e/data LATEST
wal_e.main INFO MSG: starting WAL-E
DETAIL: The subcommand is "backup-fetch".
STRUCTURED: time=2018-05-14T06:11:50.725530-00 pid=13245
wal_e.worker.file.file_worker INFO MSG: beginning partition download
DETAIL: The partition being downloaded is part_00000000.tar.lzo.
HINT: The absolute file key is home/bylee/test/wal-e/basebackups_005/base_000000010000000000000017_00000040/tar_partitions/part_00000000.tar.lzo.
STRUCTURED: time=2018-05-14T06:11:50.832706-00 pid=13245
--wal 복구
$ cat recovery.conf
restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch %f %p'
recovery_target_time = '2018-05-14 16:31:00'
--PostgreSQL 시작
$ pg_ctl -D /home/bylee/test/wal-e/data start
waiting for server to start.... done
server started
-- wal 복구 확인
$ psql -d postgres
- data 복구는 backup-fetch 명령어로 복구가 가능하다.
pgadmin4에 대한 예제는 다음과 같다.
이 예제는 pgadmin4 설치부터 시작한다.
설치가 완료가 되면 백업 및 복구를 설명한다.
pgadmin4 설치
다운로드 링크: https://www.pgadmin.org/download/
위 다운로드 링크에 가면 설치 방법이 다양하게 있으며,
여기서는 https://www.pgadmin.org/download/pgadmin-4-python-wheel/에서 설명하는 방법으로 설치를 진행한다.
postgresql rpm 설치를 해야 pgadmin4를 rpm으로 설치할 수 있는 것처럼 보인다.
여기서는 postgresql 설치가 필요하지 않기 때문에 rmp 설치가 아닌 다른 방법으로 pgadmin4를 설치한다.
pgadmin4 rpm 설치 파일이 없어서 python-wheel 사용한다.
--root 접속
$ su -
--python 버전 확인
[root@bylee5 ~]# python --version
Python 2.7.14
--pgadmin4 설치전에 다음 프로그램이 설치가 되어 있어야 한다.
[root@bylee5 ~]# dnf install redhat-rpm-config
[root@bylee5 ~]# dnf install python2-devel
--pgadmin4 다운로드
[root@bylee5 ~]# wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v3.0/pip/pgadmin4-3.0-py2.py3-none-any.whl
--2018-05-14 18:42:54-- https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v3.0/pip/pgadmin4-3.0-py2.py3-none-any.whl
Resolving ftp.postgresql.org (ftp.postgresql.org)... 174.143.35.246, 204.145.124.244, 217.196.149.55, ...
Connecting to ftp.postgresql.org (ftp.postgresql.org)|174.143.35.246|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72901847 (70M) [application/octet-stream]
Saving to: 'pgadmin4-3.0-py2.py3-none-any.whl'
pgadmin4-3.0-py2.py3-none-any.whl 100%[============================================================>] 69.52M 4.69MB/s in 20s
2018-05-14 18:43:16 (3.49 MB/s) - 'pgadmin4-3.0-py2.py3-none-any.whl' saved [72901847/72901847]
--pgadmin4 설치
[root@bylee5 ~]# pip install ./pgadmin4-3.0-py2.py3-none-any.whl
...
Running setup.py install for pycrypto ... done
Running setup.py install for WTForms ... done
Running setup.py install for speaklater ... done
Running setup.py install for Flask-BabelEx ... done
Running setup.py install for Flask-Principal ... done
Running setup.py install for Flask-Mail ... done
Running setup.py install for Flask-Login ... done
Running setup.py install for importlib ... done
Running setup.py install for pyrsistent ... done
Running setup.py install for htmlmin ... done
Running setup.py install for Flask-HTMLmin ... done
Successfully installed Babel-2.5.3 Flask-BabelEx-0.9.3 Flask-Gravatar-0.5.0 Flask-HTMLmin-1.3.2 Flask-Login-0.3.2 Flask-Mail-0.9.1 Flask-Principal-0.4.0 Flask-Security-3.0.0 Flask-WTF-0.14.2 WTForms-2.1 argparse-1.4.0 backports.csv-1.0.5 extras-1.0.0 fixtures-3.0.0 html5lib-1.0.1 htmlmin-0.1.12 importlib-1.0.4 linecache2-1.0.0 passlib-1.7.1 pgadmin4-3.0 pycrypto-2.6.1 pyrsistent-0.14.2 python-mimeparse-1.6.0 pytz-2018.3 speaklater-1.3 sqlparse-0.2.4 testtools-2.3.0 traceback2-1.4.0 unittest2-1.1.0 webencodings-0.5.1
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
--pgadmin4 설치 경로 확인
[root@bylee5 ~]# cd /
[root@bylee5 /]# find . -wholename "*pgadmin4/config.py"
./usr/lib/python2.7/site-packages/pgadmin4/config.py
find: './run/user/1000/gvfs': Permission denied
--pgadmin4 시작
[root@bylee5 /]# cp /usr/lib/python2.7/site-packages/pgadmin4/config.py /usr/lib/python2.7/site-packages/pgadmin4/config_local.py
[root@bylee5 /]# python /usr/lib/python2.7/site-packages/pgadmin4/pgAdmin4.py
NOTE: Configuring authentication for SERVER mode.
Enter the email address and password to use for the initial pgAdmin user account:
Email address: bylee@bitnine.net
Password:
Retype password:
pgAdmin 4 - Application Initialisation
======================================
Starting pgAdmin 4. Please navigate to http://127.0.0.1:5050 in your browser.
pgadmin4 로그인
웹브라우저의 주소창에 http://127.0.0.1:5050라고 입력하면 다음과 같은 로그인 화면이 나타난다.
<사진>
로그인이 정상적으로 되었다면 다음과 같은 화면이 나타난다.
<사진>
위 화면과 같이 보인다면 PostgreSQL 서버에 연결을 시도해 본다.
연결하기 위해 왼쪽 영역에서 있는 Server 항목을 우클릭하여 create > server... 선택한다.
<사진>
Create - Server 화면이 나타나면 General 탭의 Name 항목에 이름을 설정하고, Connection 탭의 Host, Port, Maintenance database, Username을 알맞게 입력한 다음에 Save 버튼을 누른다.
이에 대한 예제 결과 화면은 다음과 같다.
<사진>
백업 및 복구 관련 명령어를 사용하기 위해 PostgreSQL의 바이너리 경로를 설정해야 한다.
설정은 File > Preferences > Paths > Binary paths로 이동해 PostgreSQL Binary Path 항목에 입력한다.
이에 대한 예제 결과 화면은 다음과 같다.
테스트 데이터 생성
질의를 입력할 수 있는 창을 만들기 위해 Tools > Query Tool 클릭하여 생성한다.
다음과 같이 명령어를 입력한다.
select 1;
이에 대한 예제 결과 화면은 다음과 같다.
<사진>
pgadmin4 백업 및 복구
백업 및 복구 테스트는 pgadmin4의 backup 기능을 이용해 postgres 데이터베이스를 백업하고, pgadmin4의 restore 기능을 이용해 복구한다.
백업시 텍스트 포맷은 콘솔의 psql 명령어로만 복구가 가능하다.
백업시 비 텍스트 포맷은 restore 명령어로만 복구가 가능하다.
따라서 pgadmin4에서는 psql 명령어를 사용할 수 없고, restore 명령어만 제공하기 때문에 비 텍스트 포맷으로만 백업을 한다.
백업
백업은 pgadmin4 화면의 Browser 영역에서 백업하고 싶은 데이터베이스명을 우클릭하여 backup... 항목을 선택으로 가능하다.
Backup (database: postgres)이라는 화면이 나타나고, 이 화면에서 세부적인 백업 설정을 할 수 있다.
이 예제에서는 General 탭의 Filename과 Format 항목만 설정하고 Backup 버튼을 누른다. 나머지 항목들은 기본값을 사용한다.
Format은 Custom 또는 Jar을 선택한다. 다른 것으로 선택하면 restore를 할 수 없고, psql을 사용해야 한다.
예제 결과는 다음과 같다.
백업이 정상적으로 성공되었다면 다음과 같은 화면이 보일 것이다.
위 화면에서 Click here for details 링크를 클릭하면 다음과 같은 상세 과정이 보인다.
위 화면에 통해 백업 파일이 저장된 경로를 확인할 수 있다. --file 옵션에 경로가 있다.
/var/lib/pgadmin/storage/bylee 경로로 이동하면 backup 파일이 생성된 것을 확인할 수 있다.
[root@bylee5 pgadmin]# cd /var/lib/pgadmin/storage/bylee
[root@bylee5 bylee]# ll
-rw-r--r--. 1 root root 8478 5월 15 12:00 backup
복구
복구하기 위해 새로운 데이터베이스를 다음과 같이 선택해 생성한다.
backup이라는 데이터베이스를 다음과 같이 생성한다.
backup 데이터베이스를 우클릭하여 restore... 항목을 선택한다. 결과는 다음과 같다.
Restore (Database: backup) 화면이 나타나고, 이 화면에서 세부적인 복구 설정을 할 수 있다.
이 예제에서는 General 탭의 Format, Filename 항목만 설정하고 Restore 버튼을 누른다. 나머지 항목들은 기본값을 사용한다.
예제 결과는 다음과 같다.
복구가 정상적으로 성공되었다면 다음과 같은 화면이 보일 것이다.
위 화면에서 Click here for details 링크를 클릭하면 다음과 같은 상세 과정이 보인다.
데이터 확인
Tools > Query Tool 클릭해 질의를 입력할 수 있는 창을 만든다.
다음 명령어를 입력하고, 실행한다.
select 1;
결과 화면은 다음과 같다.
<사진>
서버명 > Backup Globals... 백업은 가능하지만, Format이 Plain이라서 pgadmin4의 restore로 복구할 수 없다.
콘솔의 psql 명령어를 사용해야 하기 때문에 여기서는 다루지 않는다.
부록
개별적으로 wal 파일을 백업하기
- wal 백업 명령어 예: envdir /etc/wal-e.d/env wal-e wal-push <data 폴더 절대 경로>/pg_wal/00000001000000000000001C
-
00000001000000000000001C는 wal 파일이다.
[bylee@bylee5 pg_wal]$ envdir /etc/wal-e.d/env wal-e wal-push /home/bylee/install/agensgraph/data/pg_wal/000000010000000000000004
wal_e.worker.upload INFO MSG: begin archiving a file
DETAIL: Uploading "/home/bylee/install/agensgraph/data/pg_wal/000000010000000000000004" to "file://localhost/home/bylee/test/wal-e/wal_005/000000010000000000000004.lzo".
STRUCTURED: time=2018-05-14T07:06:46.956190-00 pid=12597 action=push-wal key=file://localhost/home/bylee/test/wal-e/wal_005/000000010000000000000004.lzo prefix=home/bylee/test/wal-e/ seg=000000010000000000000004 state=begin
wal_e.worker.upload INFO MSG: completed archiving to a file
DETAIL: Archiving to "file://localhost/home/bylee/test/wal-e/wal_005/000000010000000000000004.lzo" complete at 290605KiB/s.
STRUCTURED: time=2018-05-14T07:06:47.068667-00 pid=12597 action=push-wal key=file://localhost/home/bylee/test/wal-e/wal_005/000000010000000000000004.lzo prefix=home/bylee/test/wal-e/ rate=290605 seg=000000010000000000000004 state=complete
-
envdir의 S3 설정 예
$ mkdir -p /etc/wal-e.d/env
$ echo "YOUR_AWS_ACCESS_KEY" > /etc/wal-e.d/env/AWS_ACCESS_KEY_ID
$ echo "YOUR_AWS_SECRET" > /etc/wal-e.d/env/AWS_SECRET_ACCESS_KEY
$ echo 's3://myservice/pg-backups' > /etc/wal-e.d/env/WALE_S3_PREFIX
$ chown -R root:postgres /etc/wal-e.d
pgadmin4 import/export문서:https://www.pgadmin.org/docs/pgadmin4/dev/import_export_data.html#import-export-data
pgadmin4 PITR이 가능한가? 추가적으로 테스트 필요
문서: https://www.pgadmin.org/docs/pgadmin4/dev/add_restore_point_dialog.html#add-restore-point-dialog
'PostgreSQL' 카테고리의 다른 글
PostgreSQL Authorization (0) 2019.11.22 PostgreSQL 백업 및 복구 - Migration (0) 2019.11.22 PostgreSQL 백업 및 복구 - 명령어 사용 (0) 2019.11.22 대기업 PostgreSQL DBA 면접 후기 (1) 2019.11.22 audit 제품 비교 (0) 2019.11.08