Для чого спеціальна база даних «постгреси»?


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і може бути відкинута і створена заново в разі потреби.


3
Так. На практиці зазвичай потрібно залишати його порожнім і незмінним, як зручне місце для підключення. Це дійсно бородавка в PostgreSQL, наслідок того, що PostgreSQL не дозволяє вам підключатися до "жодної бази даних зокрема", як це роблять інші СУБД.
Крейг Рінгер

1
Велике спасибі, це гарна відповідь! Я заборонив доступ публічних користувачів до postgresвсього, і все ще працює, за винятком одного: pgAdmin III більше не підключається, якщо я не вкажу цільову базу даних у Maintenance DBполі. Здається, раніше він підключався до postgresбази даних.
R Кисельов

@RKiselev Так, це працює так. Так само, як писав ypercube , до нього потрібно підключити базу даних за замовчуванням.
Марцін С.

1
Pgadmin має властивість "база даних обслуговування". Просто змініть його на ваш db, який ви хочете підключити
Sahap Asci

@RKiselev: Про pgAdmin та його "базу даних технічного обслуговування": Що таке БД технічного обслуговування задає pgAdmin?
Ервін Брандстеттер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.