기본 데이터베이스 디렉토리

기본 데이터베이스 디렉토리

저는 Slackbuild를 통해 postgres와 psql을 설치하고 싶었습니다. 설치 후 Slackbuild의 readme에 제안된 대로 명령을 실행해 보았지만 설명대로 실행하면 오류가 발생했습니다.

su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"

한 줄이어야 하며 복사하여 붙여넣은 내용 중 한 줄에는 su가 있고 다른 줄에는 나머지 명령이 있습니다. 이것이 귀하의 형식 문제인지는 확실하지 않지만 확실히 그런 것 같지는 않습니다. 또한 보고하신 오류 메시지는 한 줄에 명령을 제공하지 않아 올바른 사용자로 명령을 실행하지 않았다는 생각을 뒷받침하는 것 같습니다. 파일로 실행해봤습니다. 소스를 통해 설치를 시도했지만 매우 복잡해서 다시 Slackbuild를 통해 설치했습니다. 다음을 실행해야 할 때까지는 모든 것이 정상입니다. 코드:

su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"

위의 명령을 여러 가지 방법으로 실행하려고 하면 이런 결과가 나옵니다. 실행되지 않으며 이것이 Postgres가 작동하지 않는 이유라고 생각합니다. 저는 이 어려움을 극복하고 Slackware, Linux, PSQL 및 Full Stack을 사용하는 방법을 배워서 지식 기반을 극대화하고 Slackware 프로젝트에 기여하기로 결정했습니다. 이 블로그를 통해 Postgres를 설치하는 동안 일부 중요하지만 오래된 프로그램이 내가 추가하려고 계획한 Sbo 사이트에 없다는 것을 알았습니다. 이 사람은 Slackware에 대한 흥미로운 블로그를 운영하고 있습니다.http://www.pmoghadam.com/homepage/HT...esql-epkg.html 다음은 명령을 실행하려는 시도입니다. 무슨 일이 일어나고 있다고 생각하십니까?

bash-5.1$ su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
Password: 
su: Authentication failure
bash-5.1$ sudo postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise.  See the documentation for
more information on how to properly start the server.
bash-5.1$ su - postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
Password: 
su: Authentication failure
bash-5.1$ su - postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
Password: 
su: Authentication failure
bash-5.1$ su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
Password: 
su: Authentication failure
bash-5.1$ su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
Password: 
su: Authentication failure
bash-5.1$ su postgres -c init -D /var/lib/pgsql/14/data --locale-en_US.UTF-8 -A md5 -W
su: invalid option -- 'D'
Usage: su [options] [-] [username [args]]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked shell
  -h, --help                    display this help message and exit
  -, -l, --login                make the shell a login shell
  -m, -p,
  --preserve-environment        do not reset environment variables, and
                                keep the same shell
  -s, --shell SHELL             use SHELL instead of the default in passwd

If no username is given, assume root.



bash-5.1$ su
Password: 
bash-5.1# postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise.  See the documentation for
more information on how to properly start the server.
bash-5.1# su - postgres

We are upping our standards ... so up yours.
                -- Pat Paulsen for President, 1988

postgres@Bern:~$ postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
2022-03-27 14:57:17.257 GMT [32152] FATAL:  unrecognized configuration parameter "initdb _D /var/lib/pgsql/14/data __locale"
postgres@Bern:~$ postgres -c initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W
2022-03-27 14:57:30.413 GMT [32155] FATAL:  -c initdb requires a value
postgres@Bern:~$

나는 성서에서 나에게 말한 것을 듣고 따랐기 때문에 이것이 왜 작동하지 않는지 모르겠습니다. 저는 Linux와 더 중요하게는 Slackware가 신성하고 마법 같은 소프트웨어라고 믿습니다. 계속해서 결과를 찾아보겠습니다.

6.0/import_db.sh

#!/usr/bin/env sh

dropdb sqlzoo
createdb sqlzoo
psql sqlzoo < data/create_tables.sql
ls

psql을 사용해야 하는 프로젝트 파일 디렉터리. 다음 오류가 발생합니다.

bash-5.1# cd skeleton
bash-5.1# ls
Gemfile  Gemfile.lock  data  database  import_db.sh  lib  logfile  spec
bash-5.1# ./import_db.sh 
dropdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
    Is the server running locally and accepting connections on that socket?
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
    Is the server running locally and accepting connections on that socket?
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
    Is the server running locally and accepting connections on that socket?
Gemfile  Gemfile.lock  data  database  import_db.sh  lib  logfile  spec
bash-5.1# startdb
bash: startdb: command not found
bash-5.1# initdb
initdb: error: no data directory specified
You must identify the directory where the data for this database system
will reside.  Do this with either the invocation option -D or the
environment variable PGDATA.
bash-5.1# psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
    Is the server running locally and accepting connections on that socket?
bash-5.1# 
bash-5.1# nano import_db.sh 

이 오류는 왜 발생합니까? psql을 사용할 수 없는 이유는 무엇입니까?

답변1

좋습니다. 이 모든 작업은 SlackBuild에 의해 수행되고 패키지에 포함되어야 합니다.

암호:

기본 데이터베이스 디렉토리

Postgres 사용자의 홈 디렉터리로 /var/lib/pgsql을 사용한다고 가정합니다.

mkdir -p $PKG/var/lib/pgsql/$PG_VERSION/data chown -R postgres:postgres $PKG/var/lib/pgsql chmod 700 $PKG/var/lib/pgsql

DATADIR에 대한 권한은 u=rwx(0700)여야 합니다.

chmod 700 $PKG/var/lib/pgsql/$PG_VERSION/data

OP가 README.SBo의 데이터베이스 생성 명령을 루트로 실행하는 한 /var/lib/pgsql/14/data 아래의 하위 디렉터리에도 올바른 권한이 있어야 합니다.

기본적으로 postgresql DATADIR의 모든 내용은 프로세스를 소유한 사용자인 postgres가 소유해야 합니다. 따라서 chown LOCATION_OF_DATADIR이면 충분합니다. 암호:

chown -R postgres:postgres /var/lib/pgsql

기본 수퍼유저(예: 사용자 postgres) 이외의 postgresql 사용자를 생성하지 않은 경우 postgresql에 자신의 사용자를 추가하는 것을 포함하여 데이터베이스를 수정하려면 사용자 postgres에 su를 실행하고 다음을 사용할 수 있습니다. postgres 대신 자신의 사용자로 postgresql에 로그인하는 명령입니다.

$ su -
# su postgres
$ createuser your_username

Linux 보안 모델의 일부는 최소 권한 원칙을 기반으로 작동합니다. 대부분의 프로세스는 루트가 아닌 시스템 사용자로 실행됩니다. /etc/passwd 파일을 보면 루트, 일반 사용자 외에 많은 사용자가 있는데 이들이 바로 시스템 사용자이다. 서비스를 실행하는 데 충분한 권한만 갖고 있습니다. postgresql의 시스템 사용자는 postgres입니다. 데이터베이스 디렉토리는 사용자 postgres가 소유하며 읽기/쓰기 권한만 갖습니다.

시스템 사용자는 일반적으로 비밀번호가 없으므로 먼저 루트로 로그인한 다음 su postgres -c initdb ...를 실행해야 합니다.

아니면 그냥 루트부터 시작하세요

su 포스트그레스 initdb ...

답변2

나는 같은 문제가 있었고 이것은 나에게 도움이되었습니다.

su -l

Postgres 실행 중지

/etc/rc.d/rc.postgresql stop

그 다음에

cd /var/lib/pgsql/14/data

마지막으로 Slackbuilds README.SBo에서 명령을 실행합니다.

su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"

그 후 데이터베이스 비밀번호를 묻는 메시지가 표시되었고 모든 것이 구성되었습니다.

관련 정보