2013-10-21 4 views
10

heroku pg:push 명령을 사용하여 내 로컬 postgresql 데이터베이스를 heroku로 푸시합니다. 명령은 다음과 같습니다. heroku pg:push mylocaldb DATABASE --app sushi heroku 문서에 따르면 : https://devcenter.heroku.com/articles/heroku-postgresql. postgres://bill:[email protected]/mysitedb :데이터베이스를 heroku에 푸시합니다. heroku pg : push를 사용하는 방법

Name: mysitedb 
User: bill 
Password: bill 

내 컴퓨터의 DATABASE_URL 환경 변수가 설정됩니다

은 여기 내 로컬 데이터베이스 정보입니다.

내 앱 이름은 secure-gorge-4090입니다. 나는 heroku pg:push mysitedb DATABASE --app secure-gorge-4090을 시도했다. 출력은 다음과 같습니다.

! Remote database is not empty. 
! Please create a new database, or use `heroku pg:reset` 

나는 데이터베이스에 아무것도 넣지 않은 것에 놀랐습니다. 그러나 나는 여전히 heroku pg:reset DATABASE을 실행하여 데이터베이스를 재설정했습니다. 그 후, 나는 heroku pg:push mysitedb DATABASE --app secure-gorge-4090을 다시 시도했지만 출력은 여전히 ​​동일했습니다.

나는 heroku pg:push postgres://bill:[email protected]:8000/mysitedb DATABASE --app secure-gorge-4090을 시도했다. 결과는 다음과 같습니다.

! LOCAL_SOURCE_DATABASE is not a valid database name 

로컬 데이터베이스를 heroku로 이동하는 방법을 모르겠습니다. 도움이 필요해. 감사!

답변

12

명령에 DATABASE 토큰을 실제로 입력 했습니까? 아니면이 질문에 사용중인 자리 표시 자입니까? docs you linked to에서 :

Like pull but in reverse, pg:push will push data from a local database into 
a remote Heroku Postgres database. The command looks like this: 

$ heroku pg:push mylocaldb HEROKU_POSTGRESQL_MAGENTA --app sushi 

This command will take the local database “mylocaldb” and push it to the 
database at DATABASE_URL on the app “sushi”. In order to prevent accidental 
data overwrites and loss, the remote database must be empty. You will be 
prompted to pg:reset an already a remote database that is not empty. 

Usage of the PGUSER and PGPASSWORD for your local database is also supported 
for pg:push, just like for the pg:pull commands. 

당신이 heroku config -a secure-gorge-4090

, 당신은 HEROKU_POSTGRESQL_[SOME COLOR NAME]에 대한 항목을 볼 수 있습니다. 명령에 DATABASE 대신 토큰이 사용되었는지 확인하십시오.

로컬 데이터베이스에 사용자 이름과 암호가 있으므로 약 PGUSERPGPASSWORD에 대해 언급 한 부분도 수행해야합니다.

$ PGUSER=postgres PGPASSWORD=password heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi 

그래서 당신은 같은 것을 수행해야합니다 : 여기에 pg:pull 문서에서 예제가 나는이 오래된 토론 알고

$ PGUSER=bill PGPASSWORD=bill heroku pg:push mysitedb HEROKU_POSTGRESQL_[SOME COLOR] -a secure-gorge-4090 
+0

를 입력했는지 확인하십시오 다음 명령이 필요합니다 이 오래된 미해결 문제에 관심을 가져 주셔서 감사합니다! 방금 내 명령에'DATABASE'라고 입력했습니다. 사실,'DATABASE'는 이미 기본 데이터베이스 인'HEROKU-POSTGRESQL-VIOLET'으로 설정되어 있습니다. 그래서'heroku pg : push mysitedb DATABASE -app-secure-gorge-4090'과'heroku pg : push mysitedb HEROKU-POSTGRESQL-VIOLET -app secure-gorge-4090' 같은 효과가 있어야합니다. 귀하의 조언에 따라, 나는'HEROKU_POSTGRESQL_COBALT'라는 새로운 데이터베이스를 만들었고'PGUSER = bill PGPASSWORD = bill heroku pg : push mysitedb HEROKU_POSTGRESQL_COBALT --app secure-gorge-4090'을 시도했지만 같은 오류가 발생했습니다. –

+0

어떤 오류가 있습니까? "원격 데이터베이스가 비어 있지 않습니다."오류 및 "LOCAL_SOURCE_DATABASE가 유효한 데이터베이스 이름이 아닙니다"오류가 발생했습니다. – carols10cents

+0

"원격 데이터베이스가 비어 있지 않습니다."오류가 발생했습니다. –

6

를하지만 똑같은 문제가 있었다. 꽤 편리하지는 않지만, 대신 pg : backups를 통해이를 달성 할 수있었습니다.

는 무료 pgbackups 애드온 설치하여 heroku support site

시작을 꽤 잘 자세히 설명되어 있습니다 : 다음

heroku addons:add pgbackups 

지역 pg_dump의 유틸리티를 사용하여 데이터베이스 백업을

pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dmp 
(PostgreSQL의 배포판에 포함)

그런 다음 해당 덤프 파일을 어딘가에 URL을 지정할 수 있습니다 (예 :Windows 용 보관 용)과 확실히 그것의 확인합니다 (Heroku가 가져 오기를 실행 따옴표) :

heroku pg:backups:restore 'https://dropbox.com/dYAKjgzSTNVp4jzE/mydb.dmp' DATABASE_URL 
+1

유일한 방법은 그 작품을 발견. 덕분에 – longJOURNEY

+1

두 가지주의 사항 : 경고 :'heroku addons : add'는 더 이상 사용되지 않습니다. 'heroku addons : create'를 대신 사용하십시오. ! 애드온 서비스 또는 "pgbackups"의 애드온 계획을 찾을 수 없습니다. – jasonleonhard

0

당신은

PGUSER=root PGPWD=root heroku pg:push (local database name) DATABASE_URL --app heroku (app name) 

당신이 올바른 포스트 그레스의 사용자 이름과 암호