Cannot drop the currently open database

Я только начал изучать Docker и пытаюсь создать базу данных из скрипта sql, но получаю ошибку.

2022-04-08 08:27:25.874 UTC [84] ERROR:  cannot drop the currently open database

2022-04-08 08:27:25.874 UTC [84] STATEMENT:  DROP DATABASE demo;

psql:/docker-entrypoint-initdb.d/demo.sql:17: ERROR:  cannot drop the currently open database

Команда которую я использую.

docker run --name demodb -p 5432:5432 -e POSTGRES_USER="test_sde" -e POSTGRES_PASSWORD="@sde_password012" -e POSTGRES_DB="demo" -e PGDATA=/var/lib/postgresql/data/pgdata -d -v "/Users/anton/Desktop/sde_test_db1/":/var/lib/postgresql/data -v "/Users/anton/Desktop/sde_test_db1/sql/init_db/":/docker-entrypoint-initdb.d postgres:13.3

Часть скрипта sql на котором происходит ошибка

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

DROP DATABASE demo;
--
-- Name: demo; Type: DATABASE; Schema: -; Owner: -
--

CREATE DATABASE demo;

Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Ошибка возникает, потому что в момент выполнения команд из скрипта, вы уже присоединены к БД.

Официальный докер образ postres так устроен, что при первом старте он сам создает БД указанную в переменной окружения POSTGRES_DB (или POSTGRES_USER если POSTGRES_DB не установлена) и потом присоединяется к этой БД и выполняет скрипты из каталога /docker-entrypoint-initdb.d.

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

→ Ссылка