В postgresql какая разница между "базой данных"и " отношением"? ("отношение ошибок x не существует", "база данных ошибок x уже существует")
Я вижу сопоставление этих двух ошибок и, учитывая нехватку результатов поиска Google, должен был спросить. В чем разница и что мне нужно здесь делать?
deploy=# GRANT SELECT ON angel_research_production TO angel_research;
ERROR: relation "angel_research_production" does not exist
deploy=# create database angel_research_production;
ERROR: database "angel_research_production" already exists
Я предполагаю, что мне нужно сделать этот бизнес выбора гранта от какого-то другого пользователя...
поэтому я запускаю это на postgres (dbroot) и получаю это:
postgres=# GRANT SELECT ON angel_research_production TO angel_research;
ERROR: relation "angel_research_production" does not exist
таким образом, он существует как база данных, но не как отношение. Как я могу исправить это, и каковы основные вопросы здесь? Я немного ошеломлен. Спасибо
2 ответов
я думаю, что вы действительно хотите рекурсивно GRANT
на SELECT
право на каждое отношение (таблица и представление) в базе данных angel_research_production
. Правильно?
как предоставить на все таблицы в базе данных
если да, то в PostgreSQL 9.0 и выше у вас есть:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
С руководство для Гранта. Примечание ALL TABLES IN SCHEMA
предложения. Использование:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO angel_research;
если все ваши пользовательские объекты в public
- схемы (см. ниже) это сделает трюк.
в предыдущих версиях такой функции нет, но пользовательские функции существуют как обходные пути.
Pg 9.0 также имеет ИЗМЕНИТЬ ПРИВИЛЕГИИ ПО УМОЛЧАНИЮ изменения по умолчанию привилегии, назначенные на вновь созданный объекты. Это не влияет на существующие объекты.
что означает сообщение об ошибке означает?
как отметил TokenMacGuy, отношение таблица или представление, а не база данных.
GRANT SELECT ON angel_research_production TO angel_research;
можно думать как стенография для:
GRANT SELECT ON TABLE angel_research_production TO angel_research
^^^^^
и эта таблица(отношение) не существует, так что вы получаете сообщение об ошибке выше.
на руководство для Гранта или psql
\h GRANT
вывод вы увидите:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
это показывает, что привилегии вы можете GRANT
на базе CREATE
, CONNECT
и TEMPORARY
. Нет SELECT
прямо на a база данных.
отношения? Схема? А?
есть четыре уровня организации в Pg:
кластер - контролируется почтмейстером, принимает соединения по заданному ip / port combo, содержит один или несколько базы данных включая встроенные
template0
,template1
иpostgres
базы данных. Контролируетсяpostgresql.conf
иpg_hba.conf
. Кластер БД часто создается для вас установщиком или пакетом. Не быть путают с нормальным значением кластера как вычислительный кластер или вообще значение английского языка.база данных - содержит один или несколько элементов схемы или - схемы. Подключение к определенной базе данных при подключении к Pg.
- схемы содержит объекты в том числе отношения. Если нет ... укажите в противном случае все, что создано пользователем, переходит в
public
схемы. Запросы могут ссылаться на объекты в нескольких схемах явно или через search_path, неявно.-
объекты - несколько специфично для PostgreSQL, все (включая отношение), которое существует в схеме.
отношение-это таблица (или что-то, что выглядит как один, например, представление), то есть это коллекция строк, все с теми же полями, и дано некоторое имя для ссылки на них.
база данных-это набор отношений и других сущностей (например, триггеров, функций и правил), которые хранятся вместе в некоторой логической группировке.