我想通过 Slackbuild 安装 postgres 和 psql,我这样做了。安装后,我尝试按照 Slackbuild 的自述文件中的建议运行命令,但按照所述运行它时出现错误。
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/导入_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 完成并包含在包中:
代码:
基础数据库目录
假设您使用 /var/lib/pgsql 作为 postgres 用户的主目录
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/数据
只要OP以root身份运行README.SBo中的数据库创建命令,/var/lib/pgsql/14/data下的子目录也应该具有正确的权限。
基本上,postgresql DATADIR 中的所有内容都应归用户 postgres 所有,即拥有该进程的用户。所以 chown LOCATION_OF_DATADIR 应该足够了。代码:
chown -R postgres:postgres /var/lib/pgsql
如果除了默认超级用户(即用户 postgres)之外,您还没有创建任何 postgresql 用户,那么如果您想修改数据库,包括将您自己的用户添加到 postgresql,则应该 su 到用户 postgres,然后您可以使用以下命令登录 postgresql你自己的用户而不是 postgres。
$ su -
# su postgres
$ createuser your_username
Linux 安全模型的一部分是基于最小特权原则工作的。大多数进程以系统用户而不是 root 身份运行。如果您查看 /etc/passwd 文件,除了 root 和常规用户之外,还有许多用户,这些是系统用户。他们只有足够的权限来运行他们的服务。 postgresql 的系统用户是 postgres。数据库目录由用户 postgres 拥有,并且仅具有读/写权限。
由于系统用户通常没有密码,因此您需要首先以 root 身份登录,然后运行 su postgres -c initdb ...
或者只是从根开始
su postgres 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"
之后我提示输入数据库密码,一切都已配置。