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_dropcluster和pg_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/