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
条线从.bashrc
to移到了.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 小时后数据库初始化成功。
一旦您使用 安装了 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 留给数据库管理员的功能。
小智 6
当您运行 sudo 时,最好将完整路径放在您正在运行的命令中。在您的实例中:
sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud)