public전체 테이블 구조, 데이터, 함수, fk, pk 등을 사용하여 스키마를 동일한 데이터베이스에 복사하는 방법
Postgres 버전은 8.4
PS입니다. 스키마 NOT 데이터베이스 를 복사해야 합니다.
public전체 테이블 구조, 데이터, 함수, fk, pk 등을 사용하여 스키마를 동일한 데이터베이스에 복사하는 방법
Postgres 버전은 8.4
PS입니다. 스키마 NOT 데이터베이스 를 복사해야 합니다.
답변:
pg_dump / pg_restore 자체에서이를 수행하는 간단한 방법은 없습니다. 데이터베이스를 일시적으로 제거 할 수있는 경우 다음을 시도 할 수 있습니다.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db. 의 비밀번호없이 인증을받은 수퍼 유저 ( postgres) 로서 가장 쉽습니다 . 원래 스키마의 이름을 바꾼 후 복원하십시오 . 당신은 일반 SQL 덤프가있는 경우, 당신은 할 수 없습니다 필요합니다 . peerpg_haba.confpsql my_db -f '/path/to/file.pgsql'pg_restore
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
PHP에 갇힌 경우 백틱을 사용하십시오.
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
또는 exec () 명령. 변경 사항은 sed와 같은 방식으로 사용할 수 있습니다.
여기에 6 자 더 있습니다
public.
pgAdmin을 사용하면 다음을 수행 할 수 있습니다. 꽤 수동적이지만 필요한 모든 것일 수 있습니다. 스크립트 기반 접근 방식이 훨씬 더 바람직합니다. 관리자 액세스 권한이없고 데이터베이스가 크면 로컬 컴퓨터에있는 개발 데이터베이스에서는 제대로 작동해야합니다.
복사하려는 스키마 이름을 마우스 오른쪽 단추로 클릭하고 백업을 클릭하십시오. (이보다 더 깊이 들어가서 둘 다 대신 구조를 백업하도록 선택할 수 있습니다).
백업 파일 이름을 지정하고 형식을 선택하십시오. (보통 Tar를 사용합니다.)
백업을 클릭하십시오.
백업 한 스키마를 마우스 오른쪽 단추로 클릭하고 특성을 클릭하고 임시로 다른 이름으로 바꾸십시오. (예 : temprename )
스키마 루트를 클릭하고 오브젝트 브라우저에서 마우스 오른쪽 단추로 클릭하고 새 스키마 작성을 클릭 하고 스키마 이름을 public으로 지정하십시오 . 백업에서 복사하는 스키마가됩니다.
5 단계에서 새 스키마 공용 을 마우스 오른쪽 단추로 클릭하고 복원을 클릭하십시오. 3 단계의 백업 파일에서 복원하십시오.
새 스키마 이름 바꾸기 대중을 다른 이름 (예를 들어, 사용하여 newSchema ).
스키마 temprename 변경 이름을 4 단계에서 원래 이름으로 변경하십시오.
당신은 사용할 수 있습니다
CREATE DATABASE new_db TEMPLATE = old_db;
그런 다음 필요하지 않은 모든 스키마를 삭제하십시오.
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
유일한 단점은 복사본을 만들려면 old_db에 대한 모든 연결을 결정해야한다는 것입니다. 따라서 CREATE DATABASE명령문 을 실행하는 프로세스는 예를 들어 template1에 연결해야합니다.
이것이 옵션이 아닌 경우 pg_dump / pg_restore가 유일한 방법입니다.
user1113185 answer 확장 하면 psql / pg_dump를 사용하는 전체 워크 플로우가 있습니다.
다음은의 모든 객체를 내보내고 데이터베이스 에서 와 같이 old_schema새 new_schema스키마 로 가져옵니다 .userdbname
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
public있습니까?