В 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, все (включая отношение), которое существует в схеме.

    • отношения - вещи, которые выглядят и ведут себя, как столы, как вид и таблицы

    • другие объекты также находятся в схемах, таких как функции, приведения, индексы, последовательности, операторы, агрегаты и т. д.


отношение-это таблица (или что-то, что выглядит как один, например, представление), то есть это коллекция строк, все с теми же полями, и дано некоторое имя для ссылки на них.

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