Linux Mint 17.0 Cinnamon Edition에서 이것을 모든 postgres 데이터베이스에 대한 옵션으로 사용하고 싶습니다 /var/run/postgresql
.unix_socket_directories
pg_ctl -D postgres-data -o '-F -p 33311' start
로컬 데이터베이스를 시작하는 명령을 실행할 때마다 오류가 발생합니다 FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.33311.lock": Permission denied
.
AskUbuntu, StackOverflow 및 다양한 포럼에 대한 많은 답변에서 알 수 있듯이 디렉터리에 쓸 수 있도록 디렉터리의 권한을 실행 sudo chmod 777 /var/run/postgresql
하거나 변경 해야 합니다 . sudo chown -R $USER:$USER /var/run/postgresql
그런 다음 데이터베이스를 시작할 수 있습니다. 그러나 재부팅할 때마다 권한이 사라지고 디렉터리는 더 이상 누구나 쓸 수 없으며 사용자는 postgres-xc
디렉터리의 사용자 및 그룹 소유권을 되찾습니다.
권한 문제를 제거 sudo adduser $USER postgres
하거나 완화하지도 않습니다.sudo adduser $USER postgres-xc
설명대로 새로 설치를 시도했습니다.여기, 하지만 다시 시작하는 데 여전히 문제가 있습니다.
(로컬 데이터베이스 구성 파일)의 값을 로 변경해 보았습니다 unix_socket_directories
. 이를 통해 재부팅할 때마다 권한을 업데이트하지 않고도 특정 데이터베이스를 시작할 수 있었습니다. 그러나 데이터베이스를 동적으로 설정하고 시작하는 스크립트도 있습니다. 따라서 이러한 데이터베이스는 기본 구성 파일을 사용하므로 쓸 수 없으며 스크립트를 실행할 때 권한 거부 오류가 발생합니다. 사용을 위해 이러한 구성을 수동/프로그래밍 방식으로 즉시 편집하는 것은 권장되지 않습니다./tmp
./postgres-data/postgresql.conf
pg_ctl -D $DIR initdb && pg_ctl -D $DIR start
postgresql.conf
unix_socket_directories
/var/run/postgresql
unix_socket_directories = '/tmp'
플래그를 사용하여 재정의할 수 있는 -o
옵션 pg_ctl
이 unix_socket_directories
있다는 것을 알고 있지만 /tmp
Ubuntu를 사용하지 않는 다른 개발자가 스크립트를 공유하므로 모든 사람의 해당 디렉터리 사용을 반드시 제한하고 싶지는 않습니다. /tmp
특히 구성이 약간 다른 경우에는 더욱 그렇습니다. 모든 사람이 기본 위치를 사용하여 설치하기를 원합니다. 개인적으로 저는 다른 Ubuntu 패키지와의 호환성을 위해 기본 디렉터리를 유지하는 것을 선호합니다. 예를 들어 pgadmin은 /var/run/postgresql
기본적으로 잠금 파일을 찾습니다.
/etc/postgresql/9.3/main/pg_ctl.conf
또한 사용할 때마다 이러한 옵션을 자동으로 전달하려고 편집을 시도했습니다 pg_ctl
.
# Automatic pg_ctl configuration
# This configuration file contains cluster specific options to be passed to
# pg_ctl(1).
pg_ctl_options = '-o "-c unix_socket_directories=/tmp -c unix_socket_group=jackson -c unix_socket_permissions=0777"'
그러나 이것은 효과가 없습니다.
시스템을 다시 시작할 때마다 실행할 필요 없이 /var/run/postgresql
이것을 unix_socket_directories
모든 postgres 데이터베이스에 대한 옵션으로 사용할 수 있는 방법을 알려주십시오 . sudo chown -R $USER:$USER /var/run/postgresql
감사해요.
답변1
/var/run/postgresql의 권한은 /usr/lib/tmpfiles.d/postgresql.conf에서 가져옵니다.
답변2
디렉터리를 회수하려면(즉시 및 후속 부팅 시) 다음 명령을 실행하십시오.
service='reclaim-postgresql'
service_file="/etc/init.d/${service}"
echo "#!/bin/sh
set -e
### BEGIN INIT INFO
# Provides: ${service}
# Required-Start: \$postgres-xc
# Required-Stop: \$postgres-xc
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Reclaim /var/run/postgresql
### END INIT INFO
chown -R ${USER}:${USER} /var/run/postgresql" \
| sudo tee "${service_file}"
sudo chmod +x "${service_file}"
sudo update-rc.d "${service}" defaults
sudo service "${service}" start
update postgres를 실행할 때 업그레이드가 성공하려면 sudo apt-get upgrade
일시적으로 실행해야 할 수도 있습니다 .sudo chown -R postgres:postgres /var/run/postgresql
답변3
초기화 시스템에 따라 chown/chmod 명령을 PostgreSQL의 관련 초기화 스크립트에 추가합니다(예: ) /etc/init.d/postgresql
.
답변4
pg_ctl -D ... -o "... -k /tmp" start
소켓을 생성하는데 사용/tmp