В нашей повседневной работе мы часто сталкиваемся с数据库表
и用户
а также角色
использование, из-за частого использования по умолчанию数据库表空间
и模式
(Схема), поэтому мы часто игнорируем концепции и роли табличных пространств и схем базы данных.
Далее сначала введем определение и роль схемы и табличного пространства.
Что такое Схема?
База данных содержит одну или несколько именованных схем, которые, в свою очередь, содержат таблицы. Схемы также могут содержать другие объекты, в том числе данные类型
,函数
,操作符
Ждать. Одно и то же имя объекта может использоваться в разных схемах без конфликтов; например,herschema
иmyschema
может содержатьmytable
Таблица. В отличие от баз данных, схемы не разделены строго: пока у пользователя есть разрешение, он может получить доступ к объектам любой схемы в базе данных, к которой он подключен.
Шаблоны нужны нам по ряду причин:
- Позволяет нескольким пользователям использовать базу данных, не мешая другим пользователям.
- Организуйте объекты базы данных в логические группы, чтобы упростить управление ими.
- Сторонние приложения можно размещать в разных схемах, чтобы они не конфликтовали с другими именами объектов.
Шаблоны аналогичны каталогам уровня операционной системы, за исключением того, что шаблоны не могут быть вложенными.
Что такое табличное пространство?
Табличное пространство — это место, где хранятся фактические данные. база данныхschema
Может существовать в нескольких табличных пространствах, аналогично табличное пространство также может быть несколькимиschema
Служить.
используятабличное пространство, администратор может управлять расположением диска. Чаще всего табличные пространства используются для оптимизации производительности.Например, наиболее часто используемый индекс может быть построен на очень быстром жестком диске, а менее часто используемая таблица может быть построена на дешевом жестком диске, например, для архивирования файлов. Таблица.
Отношения между табличными пространствами PostgreSQL, базами данных, схемами, таблицами, пользователями, ролями
Отношения между ролями и пользователями
существуетPostgreSQL
, есть два запутанных понятия: роли/пользователи. Почему эти двоеконцепцияЭто сбивает с толку, потому что для PostgreSQL это одни и те же два объекта. Единственная разница заключается в создании:
- я использую следующее
psql
созданная рольcustom
:
CREATE ROLE custom PASSWORD 'custom';
Затем я вхожу в систему с только что созданной пользовательской ролью, и PostgreSQL выдает сообщение об отказе:
FATAL:role 'custom' is not permitted to log in.
Указывает, что роль не имеет прав входа в систему, и система отказывается войти в систему.
- Я снова использую следующее
psql
пользователь создалguest
:
CREATE USER guest PASSWORD 'guest';
Затем я использую гостя для входа в систему, вход в систему выполнен успешно
Есть ли разница между ними? Глядя на документацию, есть еще одно описание:CREATE USER is the same as CREATE ROLE except that it implies LOGIN. ----CREATE USER
за исключением того, что по умолчаниюLOGIN
Помимо разрешений, другиеCREATE ROLE
точно такие же.
Чтобы проверить это утверждение, изменитеcustom
разрешения, увеличениеLOGIN
Разрешения:
ALTER ROLE custom LOGIN;
использовать сноваcustom
Авторизация успешна! Тогда становится ясно:
CREATE ROLE custom PASSWORD 'custom' LOGINЭквивалентноCREATE USER custom PASSWORD 'custom'.
ЭтоROLE/USER
разница.
Связь базы данных и схемы
模式(schema)
Это логический раздел базы данных.
При создании базы данных по умолчанию для базы данных создается схема --public
, которая также является схемой по умолчанию для этой базы данных. Все объекты, созданные для этой базы данных (таблицы, функции, попытки, индексы, последовательности и т. д.), создаются в этой схеме:
- Создать базу данных марс
CREATE DATABASE mars;
- использовать
custom
вход в рольmars
База данных, просмотреть все схемы в базе данных: \dn
Показать только результатыpublic
шаблон.
- Создать тестовый лист
CREATE TABLE test(id integer not null);
- Просмотр списка текущих баз данных:\d;
Результат отображения состоит в том, что таблица test принадлежит схемеpublic
.ietest
Таблица создается по умолчанию впубличный режимсередина.
- Создать новую схему
custom
, соответствующий вошедшему в систему пользователюcustom
:
CREATE SCHEMA custom;
ALTER SCHEMA custom OWNER TO custom;
- создать еще раз
test
таблица, на этот раз для указания режима
CREATE TABLE custom.test (id integer not null);
- Просмотр списка текущих баз данных: \d
отображать результат в виде таблицыtest
принадлежат к образцуcustom
. этоtest
таблица создана вcustom模式
середина.
Вывод - база данныхсхемаДля разделения база данных имеет по крайней мере одну схему, и все объекты в базе данных создаются в схеме. После того, как пользователь входит в систему и подключается к базе данных, он проходит через базу данных.search_pathнайтиschemaПорядок поиска можно задать командойSHOW search_path
; конкретный заказ также может быть передан черезSET search_path TO 'schema_name'
изменить заказ.
Официальная рекомендация такова: после того, как администратор создаст конкретную базу данных, для всех пользователей, которые могут подключаться к базе данных, должна быть создана схема с тем же именем пользователя, что и имя пользователя, а затем
search_path
Установить как$user
, то есть схема по умолчанию совпадает со схемой имени пользователя.
Связь между табличным пространством и базой данных
Заявление о создании базы данных:
CREATE DATABASE dbname;
дефолтвладелец базы данныхРоль создания текущей базы данных, табличное пространство по умолчанию является табличным пространством системы по умолчанию.pg_default.
Почему это так?
Так какPostgreSQL
данные создаютсяклонШаблон базы данных для достижения, который является тем же механизмом, что и SQL SERVER. так какCREATE DATABASE dbname
Шаблон базы данных не указан, поэтому система будет клонировать по умолчаниюtemplate1
база данных, получить новую базу данныхdbname
. (По умолчанию новая база данных будет создана путем клонирования стандартного шаблона системной базы данных1)
template1
Табличное пространство базы данных по умолчаниюpg_default
, это табличное пространство создается при инициализации базы данных, поэтому всеtemplate1
Объекты будут синхронно клонированы в новую базу данных.
Относительно полный синтаксис должен выглядеть так:
CREATE DATABASE dbname TEMPLATE template1 TABLESPACE tablespacename;
ALTER DATABASE dbname OWNER TO custom;
- Подключен к
template1
базу данных, создайте таблицу в качестве маркера:
CREATE TABLE test(id integer not null);
Вставьте данные в таблицу
INSERT INTO test VALUES (1);
- Создайте табличное пространство:
CREATE TABLESPACE tsmars OWNER custom LOCATION '/tmp/data/tsmars';
Перед этим убедитесь, что каталог **/tmp/data/tsmars** существует и пуст.
- Создайте базу данных, указав, что табличное пространство для базы данных было только что создано.
tsmars
:
CREATE DATABASE dbmars TEMPLATE template1 OWNERE custom TABLESPACE tsmars;
ALTER DATABASE dbmars OWNER TO custom;
- Посмотреть информацию обо всех базах данных в системе:\l+
Его можно найти,dbmars
Табличное пространство базы данныхtsmars
, владелецcustom
;
После тщательного анализа нетрудно прийти к выводу:
В PostgreSQL табличное пространство — это каталог, в котором хранится различная информация о содержащихся в нем базах данных.физический файл.
Суммировать
Табличное пространство — это область хранения, и в табличном пространстве можно хранить несколько баз данных, хотя PostgreSQL не рекомендует этого, но мы вполне можем это сделать. База данных не хранит напрямую такие объекты, как табличные структуры, но логически создает по крайней мере одну схему в базе данных, создает таблицы и другие объекты в схеме и назначает разные схемы разным ролям, что позволяет добиться разделения разрешений и посредством авторизации, реализован обмен объектами между режимами, и есть еще одна особенность: публичный режим может хранить объекты, доступ к которым нужен всем.
Табличные пространства используются для определения местоположения объектов базы данных на физических устройствах хранения и не относятся к отдельной базе данных. База данных — это физическая коллекция объектов базы данных, аschema
Это логическая коллекция, используемая для организации и управления объектами базы данных внутри базы данных.Под пространством имен схемы находятся объекты, с которыми будут контактировать различные приложения, такие как таблицы, индексы, типы данных, функции, операторы и т. д.
Роль (пользователь) — это система контроля разрешений в глобальной области действия сервера базы данных (кластера), которая используется для управления всеми разрешениями объектов в рамках различных кластеров. Таким образом, роли не являются специфическими для одной базы данных, но роли должны подключаться к базе данных, если им необходимо войти в систему управления базой данных. Роли могут владеть различными объектами базы данных.
Обратите внимание на общедоступный номер:ЯВА 9:30 класс,Ответить【материал】Получать1TСамая свежая техническая информация!