设置 PostgreSQL 出现错误 sudo: initdb: command not found

aar*_*rkk 10 linux postgresql ubuntu

第 1 步:我sudo apt-get install postgresql-9.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条线从.bashrcto移到了.profile,所以.profile现在最后有这个:

export PATH="/usr/lib/postgresql/9.1/bin:$PATH"
alias sudo='sudo env PATH=$PATH'
Run Code Online (Sandbox Code Playgroud)

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

更新这个站点,我读到了 dotfiles 的优先级。看起来像.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.

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

Dan*_*ité 9

一旦您使用 安装了 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 留给数据库管理员的功能。


小智 6

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

sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud)

  • 我确信这会奏效,但为什么我是唯一遇到这个问题的人?我正在查看的教程或网站都没有告诉您在命令前加上整个路径。 (2认同)