Различие между ALTER ROLE WITH CREATEDB и GRANT СОЗДАЕТ НА ТАБЛИЦЕ

Исходя из MySQL и не зная о ROLE, я рассеянно пробовал это

GRANT CREATE ON TABLESPACE pg_default TO username;

Он не имел желаемого эффекта. Команда, которую я искал, была:

ALTER ROLE username WITH CREATEDB;

Но какая разница именно? Предоставляет ли кто-то роль CREATEDB неявно давать им CREATE ON TABLESPACE...? Есть таблица, где я могу видеть все это?

Из docs, GRANT CREATE ON TABLESPACE означает (мой акцент):

Для табличных пространств позволяет использовать таблицы, индексов и временных файлов. созданных в табличном пространстве, и позволяет базам данных быть созданные, которые имеют табличное пространство по умолчанию табличного пространства. (Обратите внимание, что аннулирование этого привилегия не изменит место размещения существующих объектов.)

Ответ 1

Это совершенно разные привилегии. CREATEDB означает, что роль может создать базу данных. Если ваша роль не имеет этого, она не может создавать базы данных, период.

Предоставление CREATE для табличного пространства для роли означает, что роль сможет использовать это табличное пространство как табличное пространство по умолчанию для базы данных. Таким образом, роль CREATEDB будет создавать базу данных; просто не на этом табличном пространстве. Обратите внимание, что всегда существует табличное пространство pg_default, которое будет использоваться в качестве табличного пространства по умолчанию для баз данных, которые иначе не имеют табличного пространства по умолчанию.

Ответ 2

Похоже, первое утверждение дает вам возможность создавать табличные пространства. Это физические файлы (или пробелы на вашем устройстве хранения), содержащие данные/индексы/... базы данных.

Таким образом, вы получили два разных права с помощью команд.