PostgreSQL 데이터베이스를 다른 서버로 복사
프로덕션 PostgreSQL 데이터베이스를 개발 서버에 복사하려고합니다. 이 작업을 수행하는 가장 빠르고 쉬운 방법은 무엇입니까?
중간 파일을 만들 필요가 없습니다. 넌 할 수있어
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
또는
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
사용 psql
또는 pg_dump
원격 호스트에 연결.
데이터베이스가 크거나 연결 속도가 느린 경우 파일 덤프 및 압축 파일 전송 속도가 더 빠를 수 있습니다.
Kornel이 중간 파일로 덤프 할 필요가 없다고 말했듯이 압축 작업을하려면 압축 터널을 사용할 수 있습니다
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
또는
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
그러나이 솔루션은 또한 양쪽 끝에서 세션을 가져와야합니다.
참고 : pg_dump
백업용 psql
이며 복원 용입니다. 따라서이 답변 의 첫 번째 명령은 local에서 remote로 복사하고 두 번째 명령은 remote에서 local로 복사하는 것입니다 . 추가-> https://www.postgresql.org/docs/9.6/app-pgdump.html
pg_dump the_db_name > the_backup.sql
그런 다음 백업을 개발 서버에 복사하고 다음을 사용하여 복원하십시오.
psql the_new_dev_db < the_backup.sql
-Fp 또는 -Fc 옵션을 pg_dump로 선택할지 여부에 따라 pg_dump 및 이후 psql 또는 pg_restore를 사용하십시오 .
사용 예 :
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
버전 간 마이그레이션을 원하는 경우 (예 : postgres를 업데이트하고 localhost : 5432에서 9.1을 실행하고 localhost : 5434에서 9.3을 실행) 다음을 실행할 수 있습니다.
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
마이그레이션 문서를 확인하십시오 .
pg_basebackup
특히 대규모 데이터베이스의 경우이 작업을 수행하는 더 좋은 방법 인 것 같습니다.
백업하려는 데이터베이스 이름으로이 명령을 실행하여 DB 덤프를 수행하십시오.
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
이제이 덤프 파일을 DB를 복사하려는 원격 시스템으로 scp하십시오.
eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/
원격 머신에서 ~ / some / folder에서 다음 명령을 실행하여 DB를 복원하십시오.
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
나는 상당히 많은 어려움을 겪었고 결국 Rails 4에서 작동하게하는 방법은 다음과 같습니다.
기존 서버에서
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
덤프를 작성하기 위해 postgres Linux 사용자를 사용해야했습니다. 또한 -c를 사용하여 새 서버에서 데이터베이스를 강제로 작성해야했습니다. --inserts는 그렇지 않으면 INSERT () 구문을 사용하도록 지시합니다.
그런 다음 새 서버에서 simpy :
sudo su - postgres
psql new_database_name < dump.sql
서버간에 dump.sql 파일을 전송하기 위해 간단히 "cat"을 사용하여 내용을 인쇄하고 "nano"보다 내용을 복사하여 내용을 복사하여 다시 작성했습니다.
또한 두 데이터베이스에서 사용하고있는 ROLE이 다르기 때문에 덤프에서 모든 소유자 이름을 찾아 교체해야했습니다.
한 서버에서 다른 PostgreSQL 서버로 테이블 데이터를 복사하기 위해 Linux 쉘 스크립트를 공유하겠습니다.
PostgreSQL 서버 간 데이터 마이그레이션을위한 Linux Bash Shell Script :
#!/bin/bash
psql \
-X \
-U user_name \
-h host_name1 \
-d database_name \
-c "\\copy tbl_Students to stdout" \
| \
psql \
-X \
-U user_name \
-h host_name2 \
-d database_name \
-c "\\copy tbl_Students from stdin"
데이터를 마이그레이션하는 중입니다. 대상 / 두 번째 데이터베이스 서버에 빈 테이블을 작성하십시오.
이것은 유틸리티 스크립트입니다. 또한 host_name, database_name, table_name 및 기타 매개 변수를 추가하여 일반적인 용도로 스크립트를 수정할 수 있습니다
데이터베이스를 덤프하십시오. pg_dump database_name_name > backup.sql
데이터베이스를 다시 가져 오십시오. psql db_name < backup.sql
허용되는 답변은 맞지만 대화식으로 비밀번호를 입력하지 않으려면 다음을 사용할 수 있습니다.
PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_host}} -U {{import_db_user}} {{import_db_name}}
참고 URL : https://stackoverflow.com/questions/1237725/copying-postgresql-database-to-another-server
'Programming' 카테고리의 다른 글
SQL SELECT WHERE 필드는 단어를 포함합니다 (0) | 2020.02.15 |
---|---|
명령 출력을 클립 보드에 직접 복사하려면 어떻게해야합니까? (0) | 2020.02.15 |
왜 수업보다 구조를 선택해야합니까? (0) | 2020.02.15 |
Java의 다른 클래스에서 개인 필드의 값을 읽는 방법은 무엇입니까? (0) | 2020.02.15 |
Javascript 정규식에 사용하기위한 이스케이프 문자열 (0) | 2020.02.15 |