Запускать экземпляр PostgreSQL локально

Я пытаюсь следовать этому руководству , но в начале говорится, что нужно запускать экземпляр postgresql «локально», а не как демон, используя следующие команды.

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

Итак, я получил новую версию 12.04 (VMWare на Win7, если это имеет значение) и сделал это под своим логином:

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

Это дает мне сообщение об ошибке:

[ 112]

Полагаю, это означает, что при установке сервера он автоматически запускается демоном. Я бы предпочел просто запускать порт по умолчанию, как в учебном пособии, но я все равно попытался запустить другой порт:

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

Я следовал различным другим примерам различных способов установки postgresql, но все без помогло. Как обойти эту ошибку, чтобы postgres -D pg мог успешно выполняться?

* примечание: я совершенно готов создать совершенно новую виртуальную машину, так что если у вас есть инструкции, как это сделать с помощью свежая установка, это было бы потрясающе.

3
задан 14 May 2012 в 21:10

2 ответа

Итак, первым делом стоит остановить сервер. Это делается следующим образом:

sudo /etc/init.d/postgresql stop

Это было достаточно просто. Итак, остальное - это разрешения, поэтому, очевидно, chmod - это решение на шаге 3 ниже. (Новички Google 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.

0
ответ дан 14 May 2012 в 21:10

Если у вас нет прав администратора на компьютере, решение состоит в том, чтобы запустить Postgres с новым файлом конфигурации и попросить его создать сокет unix в каталоге, где у вас уже есть разрешение на запись.

Инициализировать новый каталог данных, здесь с именем db.

initdb -D db

Редактировать файл конфигурации db/postgresql.conf. Найдите строку, которая задает unix_socket_directories и измените ее, например, на текущий каталог (это будет каталог данных с именем db, а не каталог, из которого вы запускаете postgres)

unix_socket_directories='.'

Теперь вы можете запустите Postgres с

postgres -D db

и создайте первую базу данных, указав абсолютный путь к сокету unis в опции -h

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

0
ответ дан 14 May 2012 в 21:10

Другие вопросы по тегам:

Похожие вопросы: