쉘 스크립트를 사용하여 데이터베이스 생성 프로세스를 자동화하려고하는데 비밀번호를 psql에 전달하여로드 블록을 쳤습니다 . 쉘 스크립트의 코드는 다음과 같습니다.
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
psql
비 대화식 방식으로 비밀번호를 전달하려면 어떻게합니까 ?
쉘 스크립트를 사용하여 데이터베이스 생성 프로세스를 자동화하려고하는데 비밀번호를 psql에 전달하여로드 블록을 쳤습니다 . 쉘 스크립트의 코드는 다음과 같습니다.
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
psql
비 대화식 방식으로 비밀번호를 전달하려면 어떻게합니까 ?
답변:
로부터 공식 문서 :
암호를 정기적으로 입력하지 않으려면 ~ / .pgpass 파일을 사용하는 것이 편리합니다. 자세한 정보는 섹션 30.13 을 참조하십시오.
...
이 파일에는 다음 형식의 줄이 포함되어야합니다.
hostname:port:database:username:password
현재 연결 매개 변수와 일치하는 첫 번째 행의 비밀번호 필드가 사용됩니다.
chmod go-rwx .pgpass
psql을 호출하기 전에 스크립트 내에서 PGPASSWORD 환경 변수를 설정하십시오.
PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName
자세한 내용은 http://www.postgresql.org/docs/current/static/libpq-envars.html을 참조하십시오 .
편집하다
Postgres 9.2부터는 사용자 이름 과 비밀번호를 포함 할 수 있는 연결 문자열 또는 URI 를 지정하는 옵션도 있습니다.
ps
다른 사용자가 (Linux), ProcessExplorer (Windows) 또는 유사한 도구를 사용하여 실행중인 프로세스의 명령 행을 볼 때 비밀번호가 일반 텍스트로 표시되므로 보안 위험이 있습니다 .
데이터베이스 관리자에 대한이 질문도 참조하십시오.
space
첫 번째 문자 앞에 명령 줄에 추가 하면 명령이 bash 기록에 저장되지 않습니다. 우분투 / bash에서 작동합니다.
docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
한 줄로 :
export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
와 명령 은 SQL 명령 등"select * from schema.table"
또는 더 읽기 쉬운 :
export PGPASSWORD='password'
psql -h 'server name' -U 'user name' -d 'base name' \
-c 'command' (eg. "select * from schema.table")
PGPASSWORD='password' psql ....
. 명령이 완료된 후 변수에 액세스 할 수 없다는 이점도 있습니다.
export PGPASSWORD=YourNewPassword
다른 변형을 통해 나를 위해 일했습니다.
export PGPASSWORD
정말 나쁜 생각처럼 소리
psql에 URL을 전달하는 것을 선호합니다 .
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
이를 통해 원하는대로 환경 변수의 이름을 자유롭게 지정할 수 있으며 불필요한 파일을 만들지 않아도됩니다.
Windows에서 :
PGPASSWORD에 값을 지정하십시오. C:\>set PGPASSWORD=pass
명령을 실행하십시오. C:\>psql -d database -U user
준비된
아니면 한 줄로
set PGPASSWORD=pass&& psql -d database -U user
&&! 전에 공간 부족에주의하십시오.
-w
도 전달해야합니다 .
PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"
공장.
.pgpass
(Linux) 사용자의 홈 디렉토리에 파일 을 작성하여 수행 할 수 있습니다 .
.pgpass
파일 형식:
<databaseip>:<port>:<databasename>:<dbusername>:<password>
*
세부 정보 대신 와일드 카드 를 사용할 수도 있습니다 .
tmp.sql
암호를 묻지 않고 실행하고 싶다고 가정 해보십시오 .
다음 코드를 사용하면 * .sh 파일에서 할 수 있습니다
echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"
echo " ` psql -h 192.168.1.1 -p 5432 -U postgres postgres -f tmp.sql `
pg_env.sh의 내용을 내 .bashrc에 추가했습니다.
cat /opt/PostgreSQL/10/pg_env.sh
#!/bin/sh
# The script sets environment variables helpful for PostgreSQL
export PATH=/opt/PostgreSQL/10/bin:$PATH
export PGDATA=/opt/PostgreSQL/10/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5433
export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man
추가 (사용자 당 4653174 제안)
export PGPASSWORD='password'