2013-08-21 4 views
0

이것은 데이터베이스를 만드는 내 셸 명령입니다. 이는 사용자의 개입없이 자동으로 두 개의 데이터베이스를 작성하는 배치 스크립트의 일부로 실행됩니다.만들기에 postgresql 데이터베이스 가져 오기 명령 추가

# POSTGRES 
apt-get install -y postgresql 
echo "CREATE ROLE deploy LOGIN ENCRYPTED PASSWORD '$APP_DB_PASS';" | sudo -u postgres psql 
su postgres -c "createdb db1 --owner deploy" 
su postgres -c "createdb db2 --owner deploy" 
service postgresql reload 

이 코드 내에서 누군가가이 단계에서 SQL 파일을 postgresql로 가져 오는 작업을 어떻게 통합 할 수 있는지 설명해주십시오. 나는 그것을 믿을

이 같은 것입니다하지만 난 그 출근하지 않은 : PostgreSQL의 아마로 OS 사용자를 요구하도록 구성되어 있기 때문에

psql --username=postgres < /etc/schema.sql 
+1

권한이없는 OS 사용자로'psql -U postgres'를 시작하면 기본 보안 정책이 아닌 데이터베이스 수퍼 유저로 로그인 할 수 있다고 가정합니다. 왜'sudo/su postgres'를 사용하고 나서 사용하지 않는가? –

+0

Daniel. 여러 곳에서 코드를 사용했기 때문에 내가하는 일을 완전히 확신하지 못했습니다. –

답변

0

데비안에, 당신은 아마 다니엘의 의견을 따라야합니다 db 사용자와 동일한 사용자 이름.

그래서 당신은

su postgres -c "psql -f /etc/schema.sql" 

을 (스와는 -c 부분을 포스트 그레스없이) 또는 당신이 좋은 작은 쉘 스크립트의 모든 DB를 생성 명령을 넣을 수 다음 그냥 한 번에 실행해야합니다. 같은 뭔가 :

#!/bin/bash 
echo "CREATE ROLE deploy LOGIN ENCRYPTED PASSWORD '$APP_DB_PASS';" | su postgres -c psql 
createdb db1 --owner deploy 
createdb db2 --owner deploy 
psql db1 -f /etc/schema.sql 
psql db2 -f /etc/schema.sql 

은 그럼 당신은 sudo를 함께 그 실행 또는 SU -c 및 인증 현명한, 잘못 될 수있는 일을 단순화 할 수 있습니다.

관련 문제