Подтвердить что ты не робот

PostgreSQL - отношение [таблица] не существует

Я только что создал нового пользователя, который хотел бы получить доступ к ограниченному числу наших открытых таблиц. Пользователь создан, и я предоставил приваты в один открытый стол. Затем я зарегистрировался в БД в качестве этого пользователя и попытался запустить SELECT в таблице, к которой должен быть подключен пользователь, но я должен пропустить шаг или что-то не так, потому что когда я запускаю запрос, я получаю:

отношение [таблица] не существует

Ниже приведены шаги, которые я предпринял в порядке.

CREATE USER pqb2b WITH PASSWORD 'foo'


 select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | usecatupd |  passwd   | valuntil | useconfig
 ----------+----------+-------------+----------+-----------+----------+----         |
postgres |       10 | t           | t        | t         | ******** |          | 
 pgb2b   | 17267767 | t           | f        | f         | ******** | infinity |

(1 строка)

GRANT ALL on b_users to pgb2b;



SELECT
schemaname||'.'||tablename
FROM
pg_tables
WHERE
has_table_privilege (
    'pgb2b',
    schemaname||'.'||tablename,
    'select'
 )
AND
schemaname NOT IN (
    'pg_catalog',
    'information_schema'
 );

public.b_users
(1 row)



~ postgres$ psql -U pgb2b  mydb
psql (9.0.3)
Type "help" for help.

mydb=> select * from b_users;
ERROR:  relation "b_users" does not exist
LINE 1: select * from b_users;

 mydb=> \d+ b_users
 Did not find any relation named "b_users".
4b9b3361

Ответ 1

Несмотря на то что я предоставлял привилегии своему пользователю pgb2b, я забыл указать использование этого пользователя:

GRANT usage on schema public to pgb2b;

Это устранило проблему. Я нашел этот post о том, что очень удобны настройки пользователей PostgreSQL.

Ответ 2

Примечание для других, которые могут это видеть, хотя это может и не относиться к этому конкретному вопросу -

Если вы не используете общедоступную схему, вам необходимо обновить search_path

SET search_path TO my_schema, public;

Кредит: Почему PostgreSQL\dt показывает только общедоступные таблицы схем?