设置 PostgreSQL 时出现错误 sudo: initdb: 未找到命令

设置 PostgreSQL 时出现错误 sudo: initdb: 未找到命令

sudo apt-get install postgresql-9.1步骤 1:我按照 PostgreSQL 网站上的建议安装了 PostgreSQL

第 2 步:我尝试运行postgres。但未找到。无论出于什么原因,安装似乎没有将其添加到路径中?所以我不得不手动将该行添加export PATH=$PATH:/usr/lib/postgresql/9.1/bin到我的 的底部~/.profile。(旁注:有人知道为什么需要这样做吗?我在安装时做错了什么吗?我在 Ubuntu 中安装的其他所有内容都“正常工作”,而无需更改$PATH...)

步骤 3:我尝试运行initdb /usr/local/var/postgres。权限被拒绝。我尝试运行sudo initdb /usr/local/var/postgres。结果是sudo: initdb: command not found。为什么找不到此命令?我刚刚运行了该死的东西!echo sudo $PATH显示路径中的 PostgreSQL 目录...我遗漏了什么?

我是 Linux 的新手,但这些都是我一直遇到的非常恼人的问题!

更新:我认为这与这个问题。但是,使用以下命令sudo -i运行不是解决问题。我只得到:-bash: initdb: command not found。太好了。

更新似乎更接近了。所以我按照指示添加alias sudo='sudo env PATH=$PATH'到我的.bashrc。仍然不起作用!看起来别名不起作用。当我运行时alias,我只显示一个。然而我的却.bashrc充满了它们……所以设置它们时出了问题。

更新:由于我使用的是 Ubuntu 和 RVM,RVM 建议我将终端设置为“以登录 shell 身份运行命令”。根据阅读,我这样做了这里,似乎该.bashrc文件未在登录 shell 中读取,仅读取配置文件。因此,我将alias行从.bashrc移至.profile,因此.profile现在末尾有以下内容:

export PATH="/usr/lib/postgresql/9.1/bin:$PATH"
alias sudo='sudo env PATH=$PATH'

... 但它仍然不起作用。运行alias仅显示 RVM 别名,但没有显示sudo我尝试设置的别名。

更新本网站,我读到了关于点文件的优先级。看起来.bash_profile是在 之前.profile。话虽如此,我的PATH添加是在 中完成的.profile,似乎加载得很好,那么为什么alias也不起作用呢?但是,将 移入 却有效alias.bash_profile.profile。然后命令alias显示了我的新别名。我终于输入了sudo initdb /usr/local/var/postgres,结果显示:initdb: cannot be run as root。哦,真的吗?那你为什么给我权限错误?! 所以现在我认为问题是我只需要进入chown文件夹,但仍然initdb以我的用户身份运行而不是root

更新运行命令sudo chown myuser /usr/local/var/postgres/,然后运行,initdb允许初始化数据库。很高兴很明显,目录权限需要设置为 myuser 而不是 root。难以置信。4 小时后成功初始化数据库。

答案1

一旦您使用 安装了 PostgreSQL 服务器apt-get install postgresql-9.1,它就已经设置并运行了,因此您的步骤 #2 和 #3(运行postgres和 运行initdb)就没有必要了,事实上,这会与已经设置的内容相冲突。通过手动运行,initdb您将得到两个 postgres 集群。

Debian 和 Ubuntu 的 postgresql 包提供了一个名为pg_createcluster位于/usr/bin其中,如果需要创建新集群,您可以调用它。在后台,此命令将initdb使用正确的参数进行调用。最终用户不应该initdb直接调用,这就是它不在正常 PATH 中的原因。还有其他命令,例如pg_dropclusterpg_ctlcluster它取代了非打包的 PostgreSQL 实例的管理方式。

所有这些都是为了让打包系统自动处理和升级集群,这是基线 PostgreSQL 留给数据库管理员的功能。

答案2

运行 sudo 时,最好输入正在运行的命令的完整路径。在您的实例中:

sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres

答案3

我在使用 Amazon Web Services 实例时遇到了这个问题。Postgresql 网站假定您已安装服务器和客户端。

sudo yum install postgresql postgresql-server postgresql-devel postgresql-contrib postgresql-docs

答案4

您可以简单地创建一个指向环境已知的路径的符号链接,例如:

sudo ln -s /usr/lib/postgresql/9.1/bin/initdb /usr/local/bin/

相关内容