Что такое шаблоны PostgreSQL?

Всякий раз, когда вы создаете новую базу данных в Postgres, вы фактически основываете ее на уже существующей базе данных в вашем кластере.

Эта база данных, template1, и другая, называемая template0, являются стандартными системными базами данных, которые существуют в каждом вновь созданном кластере баз данных. Не верите мне? Почему бы быстро не запустить базу данных и не убедиться в этом с помощью этого запроса:

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

template1

По умолчанию выполняется:

просто копирует все из базы данных template1. Мы можем изменить эту шаблонную базу данных любым способом: добавить таблицу, вставить некоторые данные, создать новые расширения или установить процедурные языки. Любое из этих действий будет распространено на последующие созданные базы данных.

Однако это нежелательно. Удаление любой из этих модификаций потребует от вас ручной деинсталляции или удаления этих изменений из template1. У вас есть возможность удалить и создать заново всю базу данных template1. К сожалению, это сопряжено с риском совершить ошибку на этом пути, что приведет к поломке CREATE DATABASE. Лучше оставить template1 в покое и создать собственную базу данных шаблонов.

Пользовательские шаблонные базы данных

Чтобы установить существующую базу данных в качестве базы данных шаблона:

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

Чтобы создать новую базу данных с этим шаблоном:

Преимущества

  • Теперь вы можете иметь пользовательские шаблоны без необходимости беспокоиться о загрязнении template1.
  • Вы можете безопасно сбросить всю базу данных пользовательских шаблонов без риска нарушения CREATE DATABASE.
  • При желании вы можете создать несколько баз данных шаблонов для различных случаев использования.

Ограничения

  • Чтобы правильно создать базу данных из базы данных пользовательского шаблона, не должно быть никаких других соединений. CREATE DATABASE немедленно завершается неудачей, если в начале запроса существуют какие-либо соединения.
  • Таким образом, если вы хотите реплицировать базу данных, сохраняя при этом свои соединения (например, производственную базу данных), идеальнее всего будет использовать утилиту Postgres pg_dump.

template0

template0 содержит те же данные, что и template1. Мы можем рассматривать эту базу данных шаблонов как запасной вариант, если с шаблоном1 произойдет что-то необратимое. Как таковая, эта база данных шаблона никогда не должна быть изменена каким-либо образом, как только кластер баз данных был инициализирован. Чтобы создать базу данных с шаблоном0 в качестве базы данных шаблона:

Применение

  • Если что-то пойдет не так с template1, он может быть удален и воссоздан с шаблоном0 в качестве базы данных шаблона.
  • Мы также можем создать чистую базу данных, которая не содержит никаких модификаций, присутствующих в шаблоне1. Это будет полезно при восстановлении из pg_dump. Любые конфликты, вызванные модификациями, отсутствующими в дампе, устраняются.
  • template0 можно использовать для задания новых кодировок. Как указано в этой статье, создание новой базы данных с шаблоном1 и новыми кодировками приведет к ошибке.

Будет успешным

Выдаст ошибку

Заключение

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий