Я пытаюсь следовать этому руководству , но в начале говорится, что нужно запускать экземпляр 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
мог успешно выполняться?
* примечание: я совершенно готов создать совершенно новую виртуальную машину, так что если у вас есть инструкции, как это сделать с помощью свежая установка, это было бы потрясающе.
Итак, первым делом стоит остановить сервер. Это делается следующим образом:
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
.
Если у вас нет прав администратора на компьютере, решение состоит в том, чтобы запустить 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