Для чего нужна специальная база данных «postgres»?

18

У меня есть сервер PostgreSQL с несколькими работающими на нем базами данных. Одна из баз данных называется postgres, и она была там с самого начала. Я не мог видеть никаких таблиц внутри, и я никогда не использовал это явно, но я заметил, что любому пользователю разрешено создавать таблицы в базе данных (это не то, что я хочу - я не хочу, чтобы какие-либо пользователи, кроме администратора, создавали любые столы где угодно).

У меня такое ощущение, что это какая-то специальная база данных, которая требуется для нормальной работы сервера, но какова ее цель? Какие данные хранятся (или могут быть) внутри? Содержит ли он метаданные о других базах данных (например information_schema,?). Может ли случиться что-то неприятное, если я отзову connectправа на эту базу данных у общественности? Или если я даже уроню это?

Я гуглил полчаса, но всегда получал совершенно не связанные вещи, потому что это слово postgresтакже используется для пользователя postgresи самой СУБД.

Р Киселев
источник

Ответы:

31

В этом нет ничего особенного. Как описано в документации PostgreSQL, Создание базы данных , вам необходимо подключиться к базе данных, чтобы создать другую:

Поскольку для выполнения команды вам необходимо подключиться к серверу базы данных CREATE DATABASE, остается вопрос, как можно создать первую базу данных на любом данном сайте. Первая база данных всегда создается initdbкомандой при инициализации области хранения данных. (См. Раздел 17.2.) Эта база данных называется postgres. Итак, чтобы создать первую «обычную» базу данных, к которой вы можете подключиться postgres.

и в шаблонных базах данных :

Примечание: template1 и template0не имеют никакого особого статуса, кроме того факта, что имя template1является именем исходной базы данных по умолчанию для CREATE DATABASE. Например, можно сбросить template1и воссоздать его template0без каких-либо вредных последствий. Этот курс действий может быть целесообразным, если кто-то небрежно добавил кучу мусора template1. (Чтобы удалить template1, он должен иметь pg_database.datistemplate = false.)

База postgresданных также создается при инициализации кластера базы данных. Эта база данных является базой данных по умолчанию для пользователей и приложений для подключения. Это просто копия template1и может быть удалена и воссоздана при необходимости.

ypercubeᵀᴹ
источник
3
Ага. На практике вы, как правило, должны оставлять его пустым и неизменным в качестве удобного места для подключения. Это действительно бородавка в PostgreSQL, что является следствием того факта, что PostgreSQL не позволяет подключаться к «конкретной базе данных», как это делают другие СУБД.
Крейг Рингер
1
Большое спасибо, это хороший ответ! Я запретил доступ публичным пользователям, postgresи все по-прежнему работает, за исключением одного: pgAdmin III больше не подключается, если я не укажу базу данных targed в Maintenance DBполе. Похоже, раньше он подключался к postgresбазе данных.
Киселев
@RKiselev Да, это так работает. Как писал ypercube , это база данных по умолчанию для подключения.
Марцин С.
1
У Pgadmin есть свойство "база данных обслуживания". Просто измените его на свою базу данных, которую вы хотите подключить
Sahap Asci
@RKiselev: О pgAdmin и его «базе данных обслуживания»: что такое DB обслуживания, которую запрашивает pgAdmin?
Эрвин Брандштеттер,