Создать базу данных, если ее нет в postgres

Я новичок в postgreSQL, и я пытаюсь создать файл схемы, который будет содержать все сценарии, необходимые для создания базы данных и необходимых таблиц. Раньше я делал это для сервера SQl, проверяя, существует ли база данных, а затем запускал необходимые сценарии.

Следующий сценарий в postgreSQL выдает ошибку: «CREATE DATABASE не может быть выполнено из функции или строки с несколькими командами».

do $$
begin
If not exists (select 1 from pg_database where datname = 'TestDB')
Then
 CREATE DATABASE "TestDB";
end if;
end
$$

Я создал файл дампа базы данных postgres, экспортировав резервную копию базы данных, но содержащую,

Drop Database "TestDB"

Create Database "TestDB"

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

Как мне проверить, существует ли база данных в postgreSQL, без необходимости отбрасывать базу данных и воссоздавать ее каждый раз, когда я запускаю файл?

Заранее спасибо


person Sugan88    schedule 01.10.2018    source источник
comment
Отвечает ли это на ваш вопрос? Моделировать СОЗДАТЬ БАЗУ ДАННЫХ, ЕСЛИ НЕ СУЩЕСТВУЕТ для PostgreSQL?   -  person benvc    schedule 29.10.2019


Ответы (1)


Для сценария оболочки, который создает базу данных, если она не существует, а в противном случае просто сохраняет ее как есть:

psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'my_db'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE my_db"

Я обнаружил, что это полезно в сценариях подготовки DevOps, которые вы, возможно, захотите запустить несколько раз на одном и том же экземпляре.

Для тех из вас, кто хотел бы получить объяснение:

-c = run command in database session, command is given in string
-t = skip header and footer
-q = silent mode for grep 
|| = logical OR, if grep fails to find match run the subsequent command

Ответьте на кредит andreasl из этот вопрос.

person kooskoos    schedule 16.12.2020