Как можно запустить скрипт для создания второй базы данных в Postgres?

  • 1 сентября 2023 г. 18:57
Ответы на вопрос 1
Если вы используете контейнер с Postgres и хотите создать вторую базу данных с помощью скрипта инициализации, вы можете выполнить следующие шаги:

1. Создайте новый скрипт, который будет выполнять операции по созданию вашей второй базы данных. Допустим, назовем его `init-second-db.sql`.
   ```sql
   -- Создание второй базы данных
   CREATE DATABASE second_db;
   
   -- Назначение прав доступа к базе данных
   GRANT ALL PRIVILEGES ON DATABASE second_db TO your_db_user;
   ```

2. Установите переменные среды `POSTGRES_USER` и `POSTGRES_PASSWORD` в контейнере с Postgres, чтобы задать учетные данные пользователя базы данных. Эти переменные среды будут использоваться в команде `psql` для выполнения скриптов инициализации.
   ```bash
   docker run -e POSTGRES_USER=your_db_user -e POSTGRES_PASSWORD=your_db_password ...
   ```

3. Запустите контейнер с Postgres, подключив ваш скрипт инициализации и второй скрипт инициализации с помощью опции `-v`.
   ```bash
   docker run -v /path/to/your/init-second-db.sql:/docker-entrypoint-initdb.d/init-second-db.sql -v /path/to/your/init-user-db.sql:/docker-entrypoint-initdb.d/init-user-db.sql ...
   ```

   Здесь `/path/to/your/init-second-db.sql` - это путь к вашему новому скрипту `init-second-db.sql`, а `/path/to/your/init-user-db.sql` - это путь к скрипту `init-user-db.sql` для первой базы данных, который уже был создан.

4. Контейнер Postgres автоматически выполнит все скрипты с расширением `.sql` из директории `/docker-entrypoint-initdb.d/` при каждом запуске контейнера. Таким образом, оба скрипта инициализации (`init-user-db.sql` и `init-second-db.sql`) будут выполнены при запуске контейнера.

   Примечание: Если вы не хотите, чтобы скрипт `init-user-db.sql` запускался при создании второй базы данных, вы можете удалить или переместить его из `/docker-entrypoint-initdb.d/` до запуска контейнера.

В результате этого скрипт `init-second-db.sql` будет выполнен при создании контейнера, и вторая база данных будет создана вместе с необходимыми привилегиями доступа.
Похожие вопросы