암호 프롬프트없이 psql을 사용하는 방법은 무엇입니까?


70

REINDEX데이터베이스의 인덱스에 스크립트를 작성했습니다. 다음 중 하나입니다.

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi

문제는이 스크립트를 독립형 모드로 실행할 수 없다는 것입니다. psql실행할 때마다 비밀번호를 묻는 메시지가 표시됩니다. 또한 두 가지 제한 사항이 있습니다.

  1. 비밀번호가없는 데이터베이스에서 사용자를 작성할 수 없습니다.

  2. REINDEX테이블을 잠그기 때문에 sleep <num>각각 사이에 사용해야 합니다 REINDEX.

자동 솔루션이 있습니까?

답변:


111

비밀번호 프롬프트와 관련하여 4 가지 선택 사항이 있습니다.

  1. PGPASSWORD 환경 변수를 설정하십시오. 자세한 내용은 매뉴얼을 참조하십시오 :
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. .pgpass 파일을 사용하여 비밀번호를 저장하십시오. 자세한 내용은 매뉴얼을 참조하십시오 :
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 해당 특정 사용자에 대해 "신뢰 인증"을 사용하십시오.
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. 모든 것을 포함하는 연결 URI를 사용 하십시오 .
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532

4
PostgreSQL 9.1부터 peer로컬 연결을위한 인증 방법 도 있습니다. 현재 Linux, BSD, OS X 또는 Solaris (Windows 아님)에만 해당됩니다.
Erwin Brandstetter

1
상의주의 사항 .pgpass옵션이 여전히에 (일반적했습니다 것입니다 경우) 사용자 이름, 데이터베이스 및 호스트 이름을 지정해야합니다 psql명령
라파엘

3과 관련하여 분석법을 편집해야합니다. 여기에 설명되어 있습니다 : gist.github.com/p1nox/4953113
FuzzyAmi

export PGPASSWORD="your_pw"버전 1
gies0r

18

간단한 예 PGPASSWORD는 다음과 같습니다.

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME

도움이 되길 바랍니다.


4
안녕하세요 Ian_H, 귀하의 의견에 감사 드리며 모두 귀하의 의견에 동의합니다. 허용되는 답변은 매우 포괄적이며 내 문제를 해결했습니다. 이 오래된 게시물에 내가 답을 한 이유는 다른 사람들이 같은 느낌을 가질 수 있다고 생각하기 때문에 여전히 간단하지 않기 때문입니다.
pdm

이것은 ENV 변수를 영구적으로 설정할 필요가 없다는 것을 상기시켜주는 대답에 확실히 추가되었습니다.
kevlarr

1

계정 권한에 따라 데이터베이스를 지정하지 않은 예는 연결하는 데이터베이스에 대해 사용자 권한을 확인하기 때문에 실패 할 수 있습니다. 데이터베이스도 명시 적으로 지정하는 것이 좋습니다.

# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME    

# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME -d YOUR_DATABASE  

0

이 글에서 매우 유용한 답변입니다. 우분투 18.04에 이것을 추가하고 있습니다.

sudo PGPASSWORD=yourpasswordHere -u postgres psql

이렇게하면 환경 변수를 설정하지 않고도 비밀번호 프롬프트없이 postgres로 이동할 수 있습니다. 이것은 영구적 인 설정이 아닙니다.


이 작업을 수행하지 마십시오 : ps -ef 출력에 비밀번호가 표시됩니다.
Colin 't Hart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.