Slackware 和 postgres
我想通過 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 / 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?
好的,這一切都應該由 SlackBuild 完成並包含在包中:
程式碼:
基礎數據庫目錄
假設您使用 /var/lib/pgsql 作為 postgres 使用者的主目錄
mkdir -p $ PKG/var/lib/pgsql/ $ PG_VERSION/數據 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 使用者,那麼如果您想修改您的數據庫,您應該使用 su 到使用者 postgres,包括將您自己的使用者添加到 postgresql,然後您可以使用登錄到 postgresql您自己的使用者而不是 postgres。
$ su - # su postgres $ createuser your_username
linux 安全模型的一部分是基於最小權限原則工作的。大多數程序以系統使用者而不是 root 身份執行。如果您查看您的 /etc/passwd 文件,除了 root 和您的普通使用者之外還有很多使用者,這些是系統使用者。他們只有足夠的權限來執行他們的服務。postgresql 的系統使用者是 postgres。數據庫目錄是擁有的,並且只有使用者 postgres 的讀/寫權限。
由於系統使用者通常沒有密碼,因此您需要先以 root 身份登錄,然後執行 su postgres -c initdb …
或者只是從根
su postgres initdb …