postgresql에서 데이터베이스를 복제하는 방법?


17

스키마와 구조를 포함하여 기존 데이터베이스를 다른 새 데이터베이스에 복제해야합니다. pgadmin이 아닌 쉘 명령 환경에서 이것이 필요합니다. 친절하게 도와주세요.

nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01

내 사용자는 "postgres"입니다

nohup psql exampledbclone_01 < example-01.sql
$ pg_dump mydb > db.sql
$ psql -d newdb -f db.sql

답변:


35

동일한 PostgreSQL 설치 내에서 복제하고 사용자를 적극적으로 연결하지 않은 경우 편리한 바로 가기가 있습니다.

CREATE DATABASE my_new_database TEMPLATE my_old_database;

또는 껍질에서

createdb -T my_old_database my_new_database;

그렇지 않으면 사용해야합니다 pg_dump, createdb그리고 pg_restore, 예를 들어,

pg_dump -Fc -f olddb.pgdump -d olddb &&\
createdb newdb &&\
pg_restore -d newdb olddb.pgdump

당신이 사용하는 경우 nohup당신이 당신의 SSH 세션을 잃게 사용을 고려하는 경우 명령이 죽지 않도록 screen대신.


1
최고CREATE DATABASE my_new_database TEMPLATE my_old_database;
anjaneyulubatta505

1
훌륭한! 복사 구조뿐만 아니라 데이터도!
FOTON

당신이 사용할 수 있지만 @Foton 네는, pg_dump그리고 pg_restore당신이 더 많은 선택과 덤프 수 있도록하려면 단지 구조 (말).
크레이그 링거

0

Postgres를 사용하면 새 데이터베이스를 만들 때 서버의 기존 데이터베이스를 템플릿으로 사용할 수 있습니다. pgAdmin이 데이터베이스 생성 대화 상자에서 옵션을 제공하는지 확실하지 않지만 다음과 같은 경우 쿼리 창에서 다음을 실행할 수 있습니다.

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

여전히, 당신은 얻을 수 있습니다 :

오류 : 다른 사용자가 소스 데이터베이스 "originaldb"에 액세스하고 있습니다.

데이터베이스에서 다른 모든 사용자의 연결을 끊으려면 다음 쿼리를 사용하십시오.

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.