首先,我是 Vagrant 和 Postgres 的新手。
我使用创建了我的 Vagrant 实例http://files.vagrantup.com/lucid32.box没有任何麻烦。我可以毫无问题地 vagrant up
运行。vagrant ssh
我跟着说明经过一个小改动,我安装了“postgresql-8.4-postgis”包而不是“postgresql postgresql-contrib”。
我使用以下命令启动服务器:
postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start
当连接到 vagrant 实例时,我可以使用它psql
来连接该实例而不会出现问题。
在我的 Vagrantfile 中我已经添加了:
config.vm.forward_port 5432, 5432
但是当我尝试从本地主机运行 psql 时,我得到:
psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
我肯定我遗漏了一些简单的东西。有什么想法吗?
更新:
我找到了对此类问题的参考,文章建议使用:
psql -U postgres -h localhost
我得到:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
答案1
您提到的博客文章中的说明对于 ubuntu 来说根本不正确:它们使用了自编译服务器安装中的部分内容,而这些部分与打包版本不能很好地混合。
不应该创建 /usr/local/pgsql/data 并运行 initdb 到该目录,因为 ubuntu 包代表用户使用/var/lib/postgresql/<pg-version-number>/<cluster-name>
和运行。initdb
提到“/tmp/.s.PGSQL.5432”的错误表明该文件的预期位置不正确(对于 ubuntu)。它应该在/var/run/postgresql
。这可能是由于使用与 ubuntu 不兼容的参数手动运行 initdb 造成的。
要编辑以启用非本地连接的 postgresql.conf 和 pg_hba.conf 文件应该位于内部/etc/postgresql/8.4/main
,而不是 /usr/local/pgsql/data。
应该/etc/init.d/postgresql-8.4
由 root 启动(就像 /etc/init.d 中的其他内容一样),而不是由 postgres 用户启动。
不应手动设置 PGDATA,因为它会妨碍 ubuntu postgres 包的工作方式。
我的答案是清除并重新安装 postgresql-8.4 包,而不遵循博客文章中的任何说明。postgresql-8.4-postgis 依赖于 postgresql-8.4,因此它也将被删除。还要确保撤消 /etc/bash.bashrc 中 PGDATA 的设置。
答案2
你可能会发现我的食谱有用。我刚刚把它发布在 github 上。它配置了 Ubuntu 12.04 LTS 和 PostgreSQL 9.1。