PostgreSQL 데이터베이스로 SQL 덤프 가져 오기


451

우리는 호스트를 전환하고 있으며 이전 호스트는 사이트의 PostgreSQL 데이터베이스의 SQL 덤프를 제공했습니다.

이제 이것을 테스트하기 위해 로컬 WAMP 서버에서 설정하려고합니다.

유일한 문제는 내가 설정 한 PostgreSQL 9 에서이 데이터베이스를 가져 오는 방법에 대한 아이디어가 없다는 것입니다.

pgAdmin III을 시도했지만 '가져 오기'기능을 찾을 수없는 것 같습니다. 그래서 방금 SQL 편집기를 열고 거기에 덤프 내용을 붙여 넣고 실행하면 테이블이 생성되지만 데이터를 넣으려고 할 때 오류가 계속 발생합니다.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

또한 명령 프롬프트 로이 작업을 시도했지만 필요한 명령을 찾을 수 없습니다.

만약 내가한다면

psql mydatabase < C:/database/db-backup.sql;

나는 오류를 얻는다

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

데이터베이스를 가져 오는 가장 좋은 방법은 무엇입니까?


첫 번째와 비슷한 오류가 발생했습니다 ERROR: syntax error at or near "t". 부분 스키마 만 가져 왔으므로 CREATE TABLE스크립트의 앞부분에 있는 명령문이 실패했습니다. 가져 오기의 전체 출력을 통해 찾으십시오.
owensmartin

답변:


732
psql databasename < data_base_dump

그것이 당신이 찾고있는 명령입니다.

주의 : databasename가져 오기 전에 작성해야합니다. PostgreSQL 문서 23 장. 백업 및 복원을 살펴보십시오 .


1
psql mydatabase <C : \ database \ db-backup.sql을 시도했지만 잘못된 명령 \ database 오류가 발생합니다. 나는 또한 주위에 ""로 시도했다.
dazz

23
@Dazz postgres 프롬프트가 아닌 명령 프롬프트 (시작-> 실행-> cmd)에서이 명령을 수행해야합니다.
Jacob

2
cmd에서 실행하면 '<< 연산자는 나중에 사용하도록 예약되어 있습니다.'
dazz

3
@Dazz : 당신은 사용할 수있는 -f스위치 (또는 --file너무)
그르 Szpetkowski

47
psql --username = postgres 데이터베이스 이름 <data_base_dump.sql
Maxence

356

찾고있는 명령은 다음과 같습니다.

psql -h hostname -d databasename -U username -f file.sql

29
"-L logfile.log"매개 변수를 추가하여 출력을 파일에 기록하십시오.
zerologiko

2
"입력은 PostgreSQL 사용자 정의 형식 덤프입니다. pg_restore 명령 행 클라이언트를 사용하여이 덤프를 데이터베이스에 복원하십시오."
Wajdan Ali

3
당신은 또한 할 수 있습니다pg_restore -h hostname -d dbname -U username filename.sql
파 비우 아라 우호

114

psql에서 실행하고 싶다고 생각합니다.

\i C:/database/db-backup.sql

Emacs의 eshell은 입력 리디렉션을 지원하지 않기 때문에 이것을 사용해야했습니다. 감사.
duma

3
\ c <database_name>을 사용하여 먼저 데이터베이스로 변경하십시오.
hkong


49

이것이 OP의 상황에서 작동하는지 확실하지 않지만 대화 형 콘솔에서 다음 명령을 실행하는 것이 가장 유연한 솔루션이라는 것을 알았습니다.

\i 'path/to/file.sql'

이미 올바른 데이터베이스에 연결되어 있는지 확인하십시오. 이 명령은 지정된 파일에서 모든 SQL 명령을 실행합니다.


1
이 솔루션은 가장 많이 투표 된 솔루션이 "stdin is a tty"오류를 발생시키는 동안 저에게 효과적이었습니다.
김민준

내가 찾던 것- psql명령 줄 내부에서 스크립트를 실행하는 방법 . 감사!
vatsug

이것에 감사드립니다. 정답에 포함되어야합니다.
PKHunter

이것은 맞습니다 .Windows의 경로에 백 슬래시를 사용하지 마십시오!
Erdinc Ay

또한 Windows의 경우 이중 슬래시가 필요합니다
CMAS

44

명령 줄에서 모든 인수가 필요합니다. -W는 비밀번호입니다.

psql -h localhost -U user -W -d database_name -f path/to/file.sql

22

funsies의 경우 덤프가 압축되면 다음과 같은 작업을 수행 할 수 있습니다

gunzip -c filename.gz | psql dbname

Jacob이 언급했듯이 PostgreSQL 문서 는이 모든 것을 잘 설명합니다.


7

나는 사용한다:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

이것이 누군가를 도울 수 있기를 바랍니다.


4

pgadmin3에서 할 수 있습니다. 덤프에 포함 된 스키마를 삭제하십시오. 그런 다음 데이터베이스를 마우스 오른쪽 단추로 클릭하고 복원을 선택하십시오. 그런 다음 덤프 파일을 찾아 볼 수 있습니다.


2
그러나 .sql 파일을 선택한 후에도 '복원'버튼을 클릭 할 수 없습니다. 이 소프트웨어는 * .backup 형식의 파일과 같은 다른 종류의 파일을 원하는 것 같습니다. 해당 import-box에서 'help'를 클릭하면 pg_restore- "... 일반 텍스트가 아닌 형식 중 하나로 pg_dump에 의해 생성 된 아카이브에서 PostgreSQL 데이터베이스를 복원하는 유틸리티"를 나타냅니다. OP가 참조하는 sql 파일은 일반 텍스트 형식입니다.
JosephK

4

암호가없는 postgres 사용자 만 존재하는 localhost에 대해 많은 예제가 지나치게 복잡하다는 것을 알았습니다.

psql -d db_name -f dump.sql

4

가져올 데이터베이스가 생성되었는지 확인한 다음 덤프를 가져올 수 있습니다

sudo -u postgres -i psql testdatabase < db-structure.sql

전체 데이터베이스를 덮어 쓰려면 먼저 데이터베이스를 삭제하십시오.

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

그런 다음

sudo -u postgres -i psql -c "create database testdatabase;"

2

postgres 백업을 복원하기 위해 다양한 솔루션을 시도했습니다. MacOS에서 권한 거부 문제가 발생했지만 솔루션이 작동하지 않는 것 같습니다.

작동 방법은 다음과 같습니다.

Postgres는 Pgadmin4와 함께 제공됩니다. macOS를 사용하는 경우 CMD+ 를 누르고 SPACE입력 pgadmin4하여 실행할 수 있습니다. 크롬에서 브라우저 탭이 열립니다.

pgadmin4가 작동하는 데 오류가 발생하면 killall pgAdmin4터미널에서 시도한 다음 다시 시도하십시오.


pgadmin4 + 백업 / 복원을 얻는 단계

1. 백업 생성

데이터베이스-> "백업"을 마우스 오른쪽 단추로 클릭하여 수행하십시오.

여기에 이미지 설명을 입력하십시오

2. 파일 이름을 지정하십시오.

처럼 test12345. 백업을 클릭하십시오. 이것은 바이너리 파일 덤프를 생성하며 .sql형식 이 아닙니다.

여기에 이미지 설명을 입력하십시오

3. 어디서 다운로드했는지 확인

화면 오른쪽 하단에 팝업이 있어야합니다. "자세한 정보"페이지를 클릭하여 백업을 다운로드 한 위치를 확인하십시오.

여기에 이미지 설명을 입력하십시오

4. 다운로드 한 파일의 위치를 ​​찾으십시오

이 경우에는 /users/vincenttang

여기에 이미지 설명을 입력하십시오

5. pgadmin에서 백업 복원

1-4 단계를 올바르게 수행했다고 가정하면 복원 이진 파일이 생성됩니다. 동료가 로컬 컴퓨터에서 복원 파일을 사용하려고 할 때가 있습니다. 그 사람이 pgadmin으로 가서 복원했다고 말했습니까?

데이터베이스-> "복원"을 마우스 오른쪽 단추로 클릭하여 수행하십시오.

여기에 이미지 설명을 입력하십시오

6. 파일 찾기를 선택하십시오

파일 위치를 수동으로 선택하십시오. 파일을 pgadmin의 업 로더 필드로 끌어다 놓지 마십시오. 오류 권한이 발생하기 때문입니다. 대신 방금 만든 파일을 찾으십시오.

여기에 이미지 설명을 입력하십시오

7. 말한 파일 찾기

오른쪽 하단의 필터를 "모든 파일"로 변경해야 할 수도 있습니다. 그 후 4 단계부터 파일을 찾으십시오. 이제 오른쪽 하단의 "선택"버튼을 눌러 확인하십시오.

여기에 이미지 설명을 입력하십시오

8. 상기 파일을 복원

파일 위치가 선택된이 페이지가 다시 나타납니다. 가서 복원

여기에 이미지 설명을 입력하십시오

9. 성공

모두 정상이면 오른쪽 하단에 성공적인 복원을 나타내는 표시기가 나타납니다. 테이블을 탐색하여 각 테이블에서 데이터가 제대로 복원되었는지 확인할 수 있습니다.

10. 성공하지 못한 경우 :

9 단계가 실패하면 데이터베이스에서 기존 공용 스키마를 삭제하십시오. "쿼리 도구"로 이동

여기에 이미지 설명을 입력하십시오

이 코드 블록을 실행하십시오 :

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

여기에 이미지 설명을 입력하십시오

이제 5-9 단계를 다시 시도하십시오.

요약

이것은 오류 권한 문제가 있고 수퍼 유저로 로그인 할 수없는 경우 Postgres에서 백업을 백업 / 복원하는 방법입니다. 또는 chmod폴더를 사용하여 읽기 / 쓰기에 대한 자격 증명을 설정하십시오 . 이 워크 플로는 pgadmin의 이진 파일 덤프 기본값 인 "Custom"에 적용됩니다. 나는 .sql같은 방법으로 가정 하지만 아직 테스트하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.