# Postgresql

[Основа инструкции на хабре](https://habr.com/ru/articles/578744/)

Минимальный compose файл с возможностью подключиться извне, логином и паролем:

```yaml
services:
  postgres:
    image: postgres:16.3
    environment:
      POSTGRES_DB: "testdb"
      POSTGRES_USER: "testuser"
      POSTGRES_PASSWORD: "testpass"
    ports:
      - "5432:5432"
```

Точка входа для инициализации базы данных: **docker-entrypoint-initdb.d** Все \*.sql или \*.sh файлы в этом каталоге - скрипты для инициализации БД. Детали использования:

1. если БД уже была проинициализирована ранее, то никакие изменения к ней применяться не будут;
2. если в каталоге присутствует несколько файлов, то они будут отсортированы по имени с использованием текущей локали (по умолчанию en\_US.utf8).

```yaml
services:
  postgres:
    image: postgres:16.3
    environment:
      POSTGRES_DB: "testdb"
      POSTGRES_USER: "testuser"
      POSTGRES_PASSWORD: "testpass"
    volumes:
      - .:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
```

Для постоянного размещения БД нужно подмонтировать соответствующий каталог (куда будут сохраняться данные) в контейнер и при необходимости переопределить переменную окружения **PGDATA**

```yaml
services:
  postgres:
    image: postgres:16.3
    environment:
      POSTGRES_DB: "testdb"
      POSTGRES_USER: "testuser"
      POSTGRES_PASSWORD: "testpass"
      PGDATA: "/var/lib/postgresql/data/pgdata"
    volumes:
      - .:/docker-entrypoint-initdb.d
      - mydata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
volumes:
  mydata:
```

Подключение к базе через psql

```bash
psql -d testdb -U testuser -W -h 127.0.0.1 -p 5430
```