PostgreSQL, как сказано на её официальном сайте, это самая продвинутая в мире реляционная база данных с открытым исходным кодом.
Использование PostgreSQL
Как запустить службу PostgreSQL. Как управлять службой PostgreSQL
Запуск службы PostgreSQL:
1
|
sudo systemctl start postgresql.service
|
Остановка службы PostgreSQL:
1
|
sudo systemctl stop postgresql.service
|
Добавление службы PostgreSQL в автозагрузку:
1
|
sudo systemctl enable postgresql.service
|
Удаление службы PostgreSQL из автозагрузки:
1
|
sudo systemctl disable postgresql.service
|
Для просмотра состояния процесса PostgreSQL:
1
|
systemctl status postgresql.service |
Альтернативный вариант запуска службы для работы с определённой базой данных следующий:
1
|
sudo -u ПОЛЬЗОВАТЕЛЬ postgres -D /ПУТЬ/ДО/БАЗЫ/ДАННЫХ
|
Например:
1
|
sudo -u postgres postgres -D /var/lib/postgres/data
|
Ошибка PostgreSQL
$ psql -U my_login -h 10.0.0.101 postgres
psql: could not connect to server: Connection refused
Is the server running on host "10.0.0.101" and accepting
TCP/IP connections on port 5432?
Подобная ошибка возникает, если доступ к серверу ограничен файерволом или PostgreSQL не принимает подключение по указанному адресу/порту (10.0.2.15). Настройка файервола выходит за рамки тематики данного сайта, поэтому ниже приводится только решение проблемы, связанной с настройкой PostgreSQL.
Решение
Необходимо зайти на сервер по ssh и проверить статус СУБД командой:
$ sudo netstat -pant | grep postgres
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1439/postgres
Pезультат выполнения команды означает, что PostgreSQL принимает подключения по адресу 127.0.0.1 и порту 5432. Чтобы изменить настройки, понадобится отредактировать файл postgresql.conf
Найти местонахождение файла можно командой:
$ find / -name postgresql.conf 2> /dev/null
/etc/postgresql/9.2/main/postgresql.conf
Надо указать PostgreSQL, что необходимо принимать подключения по всем адресам:
listen_addresses = '*'
и перезагрузить СУБД:
$ sudo service postgresql restart
* Restarting PostgreSQL 9.2 database server [ OK ]
Теперь необходимо проверить настройки:
$ sudo netstat -pant | grep postgres
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1492/postgres
tcp6 0 0 :::5432 :::* LISTEN 1492/postgres
Теперь доступ к базе данных есть с любого адреса. Можно попытаться подключиться к базе данных:
$ psql -U my_login -h 10.0.0.101 postgres
Если сервер доступен, то будет получен доступ к базе данных postgres:
psql (9.2.1)
Type "help" for help.
postgres=#
либо можно получить другую ошибку:
psql: FATAL: no pg_hba.conf entry for host “10.0.0.1”, user “my_login”, database “postgres”, SSL on FATAL: no pg_hba.conf entry for host “10.0.0.1”, user “my_login”, database “postgres”, SSL off
Проблемы с подключениями клиентов
Хотя ошибки подключений, возможные на стороне клиента, довольно разнообразны и зависят от приложений, всё же несколько проблем могут быть связаны непосредственно с тем, как был запущен сервер. Описание ошибок, отличных от описанных ниже, следует искать в документации соответствующего клиентского приложения.
psql: could not connect to server: Connection refused
Is the server running on host "server.joe.com" and accepting
TCP/IP connections on port 5432?
Это общая проблема “я не могу найти сервер и начать взаимодействие с ним”. Показанное выше сообщение говорит о попытке установить подключение по TCP/IP. Очень часто объясняется это тем, что сервер просто забыли настроить для работы по протоколу TCP/IP.
Кроме того, при попытке установить подключение к локальному серверу через доменный сокет Unix можно получить такое сообщение:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Путь в последней строке помогает понять, к правильному ли адресу пытается подключиться клиент. Если сервер на самом деле не принимает подключения по этому адресу, обычно выдаётся сообщение ядра Connection refused (В соединении отказано) или No such file or directory (Нет такого файла или каталога), приведённое выше. Другие сообщения об ошибках, например Connection timed out (Таймаут соединения) могут сигнализировать о более фундаментальных проблемах, например, о нарушениях сетевых соединений.