在本地运行 PostgreSQL 实例

在本地运行 PostgreSQL 实例

我正在尝试跟随本教程,但一开始它说使用以下命令“本地”运行 postgresql 实例而不是作为守护进程运行。

$ initdb pg
$ postgres -D pg &
$ createdb shouter

因此我安装了新的 12.04(如果重要的话,是 Win7 上的 VMWare),并在我的登录下执行了以下操作:

$ sudo apt-get install postgresql
$ initdb pg
$ postgres -D pg

这给了我一个错误:

LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "localhost"
FATAL:  could not create any TCP/IP sockets

我认为这意味着安装服务器会导致它自动运行守护程序。我更喜欢像教程中那样在默认端口上运行,但我还是尝试运行不同的端口:

$ postgres -D pg -p 5555
FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5555.lock": Permission denied

我按照其他各种示例尝试了不同的方法来安装 postgresql,但都无济于事。如何解决此错误以便postgres -D pg成功执行?

*注意我非常愿意创建一个全新的虚拟机,因此如果您有关于如何在全新安装的情况下执行此操作的说明,那就太好了。

答案1

因此,第一件事就是停止服务器。具体操作如下:

sudo /etc/init.d/postgresql stop

这很简单。所以剩下的就是权限,所以显然chmod下面第 3 步中的解决方案也是如此。(新手可以谷歌 chmod 来获得一些见解)。您必须允许所有用户对“套接字目录”进行写访问。显然这只是 Debian 的问题;他们修改了他们的存储库中的 postgresql 源代码;未修改的 postgres 源中的“套接字目录”是“/tmp”,默认情况下具有自由写入权限。但是 Debian 发行版将其更改为“/var/run/postgresql”,对于非所有者来说是只读的。所以你只需要让它可写。这是来自原始 12.04 Ubuntu VM 的完整预教程安装脚本。

sudo apt-get install postgresql
sudo /etc/init.d/postgresql stop
sudo chmod a+w /var/run/postgresql
echo 'PATH=$PATH:/usr/lib/postgresql/9.1/bin' >> .bashrc
. .bashrc

sudo apt-get install leiningen

mkdir clojure
cd clojure
lein new shouter
cd shouter
gedit project.clj
  change to https://devcenter.heroku.com/articles/clojure-web-application

initdb pg
postgres -D pg &
createdb shouter
export DATABASE_URL=postgresql://localhost:5432/shouter
lein repl

为了防止它在端口 5432 上自动启动:编辑文件/etc/postgresql/9.1/main/start.conf

答案2

假设您没有计算机的管理员权限,解决方案是使用新配置文件运行 Postgres,并告诉它在您已经具有写权限的目录中创建 unix 套接字。

初始化一个新的数据目录,这里名为db

initdb -D db

编辑配置文件db/postgresql.conf。找到指定行unix_socket_directories并将其更改为当前目录(即名为 db 的数据目录,而不是运行 postgres 的目录)

unix_socket_directories='.'

现在你可以使用以下命令运行 Postgres

postgres -D db

-h并创建第一个数据库,在选项中给出 unis 套接字的绝对文件路径

createdb -h `pwd`/. customers

您可能还想更改默认端口,可以在配置中更改,也可以通过运行postgres以下命令来更改-p 5555

那么程序中的连接描述将是例如

(def psql
  {:subprotocol "postgresql"
   :subname "//localhost/shouter"})

如果您将端口从默认的 5433 更改,则必须在那里指定它,类似于"//localhost:5555/shouter"

顺便说一句,JDBC 驱动程序不支持通过 Unix 套接字连接数据库,仅支持通过 TCP/IP 套接字连接数据库。

来源:http://www.postgresql.org/docs/9.4/static/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE

相关内容