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 шт):
Ошибка возникает, потому что в момент выполнения команд из скрипта, вы уже присоединены к БД.
Официальный докер образ postres так устроен, что при первом старте он сам создает БД указанную в переменной окружения POSTGRES_DB (или POSTGRES_USER если POSTGRES_DB не установлена) и потом присоединяется к этой БД и выполняет скрипты из каталога /docker-entrypoint-initdb.d.
Это значит, что при запуске вашего скрипта БД с именем demo уже создана, и вам не нужно ни удалять ее ни создавать заново. Либо используйте другого пользователя, если вы хотите создать дополнительную БД.