sudo -u postgres
.을(를) 사용하여 컨테이너 내에서 모든 postgresql 명령을 실행하려고 하는데 sudo
.
sudo
일부 postgres는 루트로 실행되지 않기 때문에 이 작업을 먼저 수행해야 합니다.
root@473f05e08ea1:/# pg_ctl
pg_ctl: cannot be run as root
그래서 사용sudo -u postgres
여기에 제안된 대로. 직면한 첫 번째 문제는 PATH
sudo 이후 env 변수가 다르고 postgres 명령을 찾을 수 없다는 것입니다.
root@473f05e08ea1:/# sudo -u postgres pg_ctl
sudo: pg_ctl: command not found
검색한 후 사용할 수 있습니다.-E 옵션상속하다 PATH
:
root@473f05e08ea1:/# sudo -u postgres -E env "PATH=$PATH" pg_ctl
pg_ctl: no operation specified
이것이 나를 궁금하게 만든다:
PGDATA
모든 환경 변수( 등 PGOPTIONS
포함 ) 를 상속받을 수 있는 방법이 있나요 HOME
? 아니면 시행착오를 거쳐 하나씩 물려받아야 하나요?
관련된:
sudo와 su를 통해 실행할 때 PATH 변수가 다른 이유는 무엇입니까?
- 갱신 -
출력은 diff -u <(sudo -E env) <(env)
다음과 같습니다
root@2f8a4b93e1da:/# diff -u <(sudo -E env) <(env)
--- /dev/fd/63 2023-03-18 20:36:44.898156660 +0000
+++ /dev/fd/62 2023-03-18 20:36:44.898156660 +0000
@@ -8,12 +8,5 @@
TERM=xterm
SHLVL=1
PGDATA=/var/lib/postgresql/data
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-_=/usr/bin/sudo
-LOGNAME=root
-USER=root
-SHELL=/bin/bash
-SUDO_COMMAND=/usr/bin/env
-SUDO_USER=root
-SUDO_UID=0
-SUDO_GID=0
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/15/bin
+_=/usr/bin/env
답변1
두 번째 명령은
sudo -u postgres -E env "PATH=$PATH" pg_ctl
정상적으로 운영되고 있습니다.
pg_ctl
오류 메시지에서 알 수 있듯이 명령에 대한 옵션을 지정하지 않았습니다 .
이를 명확히 하기 위해,
su -l postgres
그런 다음 명령을 실행하십시오.
/usr/lib/postgresql/15/bin/pg_ctl
또는
su -l postgres
그런 다음
export PATH=/usr/lib/postgresql/15/bin:$PATH
이어서
pg_ctl
같은 이유로 같은 오류가 발생합니다.
pg_ctl
사용 중에 사용할 수 있는 옵션에 대한 자세한 내용은 매뉴얼 페이지를 참조하십시오.