2016-10-27 2 views
0

DB로 PostgreSQL을 사용하고 있습니다.원격 Linux VM에서 SQL 파일을 pg_restore 할 수 없습니다.

나는 내 원격 우분투 VM에.SQL 파일을 SCPed 있습니다.

나는 sudo su - postgres을 작성하여 DB를 작성합니다.

는 내 원래 계정에 백업하고이 시도 스위치 : 명령이 성공적으로 실행

sudo -su postgres pg_restore < temp.sql

.

그러나 나는 다시 포스트 그레스에 다시 사용자를 전환하고 dt를 내가 어떤 테이블을 찾을 수 없습니다 \ 를 사용하여 테이블의 목록은 DB를 선택한 경우.

내가 뭘 잘못하고 있니?

답변

1

'pg_restore'는 'pg_dump'에 의해 생성 된 파일을 복원하기위한 것입니다. 맨 페이지

pg_restore에에서

이 아닌 일반 텍스트 형식 중 하나에서 pg_dump의 (1)에 의해 생성 된 아카이브에서 PostgreSQL 데이터베이스를 복원하는 유틸리티입니다.

pg_restore -d my_new_database temp.sql 

다른 맛에서 pg_restore에 내 자신의 경험은 많은 것을 보여줍니다 : 파일이 pg_dump에 의해 생성 된 경우에

https://www.postgresql.org/docs/9.2/static/app-pgrestore.html

당신은 아마 어떤 데이터베이스 덤프 적어도 말할 필요 times 덤프 파일의 형식을 지정하는 맨페지에도 불구하고 덤프 파일의 형식을 '기본'형식으로 지정해야합니다.

pg_restore -d my_new_database -Fc temp.dump 

이것은 단지 추측이지만, 테이블이 실제로 복원하면 내가 DB를 지정하지 않고, 생각하고는, 그들은 기본 데이터베이스에 덤프되었다. 'postgres'데이터베이스에 테이블을 나열하여 확인할 수 있습니다 (없음).

postgres=#\c postgres 
You are now connected to database "postgres" as user "postgres". 
postgres=#\dt 
No relations found. 

테이블이 기본 데이터베이스로 복원되면 나열됩니다.

일반 텍스트 SQL 파일은 다르게 처리해야하며 일반적으로 psql을 사용하는 SQL 명령을 통해 실행됩니다.

psql -d my_database < temp.sql 
+0

나는 덤프를 만들고 '예'데이터베이스를 만드는 옵션을 표시했습니다. 그래서 나는 데이터베이스 이름이 필요 없다고 생각했다. 그러나 데이터베이스 이름을 지정하면 성공했습니다. 감사! – amitection

+0

@ameitection - 다행스럽게 도울 수 있습니다! 당신은 그 일로 인해 망쳐 놓은 유일한 사람이 아닙니다. 나는 그것이 나에게 일어났기 때문에 의심했다. – lavajumper

관련 문제