Установка PostgreSQL (Ubuntu)

🐘 Установка и настройка PostgreSQL на Ubuntu

Этот гайд поможет вам установить PostgreSQL на Ubuntu, создать базу данных и пользователя, настроить удалённое подключение и устранить типичные ошибки.


📦 Установка PostgreSQL

sudo apt update
sudo apt install postgresql postgresql-contrib -y

✅ Проверка установки

sudo systemctl status postgresql

Вы должны увидеть надпись "active (running)" — это значит, что PostgreSQL запущен.


🧑‍💻 Создание базы данных и пользователя

  1. Войти в PostgreSQL от имени суперпользователя:

    sudo -u postgres psql
  2. Создать базу данных:

    CREATE DATABASE your_database_name;
  3. Создать пользователя с паролем:

    CREATE USER your_username WITH PASSWORD 'your_password';
  4. Выдать права:

    GRANT ALL PRIVILEGES ON DATABASE your_database_name TO your_username;
  5. Выйти:

    \q
  6. Проверить созданные БД и пользователей:

    sudo -u postgres psql
    \l  # список баз
    \du # список пользователей

🌐 Настройка удалённого доступа

  1. Найти установленную версию PostgreSQL:

    ls /etc/postgresql/
  2. Отредактировать конфиг:

    sudo nano /etc/postgresql/14/main/postgresql.conf

    Найти строку:

    #listen_addresses = 'localhost'

    Изменить на:

    listen_addresses = '*'
  3. Отредактировать правила доступа:

    sudo nano /etc/postgresql/14/main/pg_hba.conf

    Добавить в конец:

    host    all             all             0.0.0.0/0               md5

    💡 Вместо md5 можно использовать scram-sha-256 (для PostgreSQL 14+)

  4. Перезапустить PostgreSQL:

    sudo systemctl restart postgresql
  5. Открыть порт:

    sudo ufw allow 5432/tcp

🔗 Строка подключения

Формат:

postgres://username:password@hostname:port/database_name

Пример:

postgres://your_username:your_password@192.168.1.100:5432/your_database_name

Пояснение:

  • username — имя пользователя

  • password — пароль

  • hostname — IP или домен сервера

  • port — порт PostgreSQL (по умолчанию 5432)

  • database_name — имя базы

💡 Некоторые приложения используют postgresql:// вместо postgres://


💬 Основные команды PostgreSQL

  • Подключиться к базе (удалённо):

    psql -h hostname -U username -d database_name
  • Подключиться локально:

    psql -U username -d database_name
  • Внутри psql:

    • \l — список баз

    • \du — список пользователей

    • \c имя_бд — подключение к базе


🧩 Устранение ошибок

🚫 Не удаётся подключиться удалённо

  • Проверить, слушает ли PostgreSQL внешний интерфейс:

    sudo netstat -tuln | grep 5432

    💡 Если netstat не установлен:

    sudo apt install net-tools
  • Проверить статус фаервола:

    sudo ufw status
  • Убедитесь, что в pg_hba.conf есть строка для 0.0.0.0/0 и нужного метода авторизации.

❌ Ошибка авторизации

  • Проверьте логин/пароль

  • Убедитесь, что у пользователя есть права на подключение с внешнего IP

📛 База данных не существует / доступ запрещён

  • Убедитесь, что база существует:

    \l
  • Проверьте права:

    SELECT datname, datacl FROM pg_database WHERE datname = 'your_database_name';

⚠️ "Permission denied for schema public"

Если видите ошибку доступа к schema public:

Пример строки подключения:

postgres://root:gradient@127.0.0.1:5432/gradient

Решение:

sudo -u postgres psql
\c gradient
GRANT ALL ON SCHEMA public TO root;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO root;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO root;
ALTER SCHEMA public OWNER TO root;

🧭 Быстрые команды

🔁 Управление службой PostgreSQL

sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl restart postgresql
sudo systemctl status postgresql

💾 Работа с базой

  • Резервная копия:

    pg_dump -U username database_name > backup.sql
  • Восстановление:

    psql -U username database_name < backup.sql

Last updated