Postgres: есть ли способ привязать пользователя к схеме? - PullRequest
1 голос
/ 26 февраля 2010

В нашей базе данных есть пользователи: A, B, C.

Каждый пользователь имеет свою собственную соответствующую схему: A, B, C.

Обычно, если бы я хотел выбрать из таблицы в одной из схем, я должен был бы сделать:

select * from A.table;

Мой вопрос:

Есть ли способ сделать:

select * from table

перейти к правильной схеме в зависимости от пользователя, который вошел в систему?

1 Ответ

2 голосов
/ 26 февраля 2010

Это поведение по умолчанию для PostgreSQL. Убедитесь, что ваш search_path установлен правильно.

SHOW search_path;

По умолчанию должно быть:

search_path
--------------
"$user",public

См. документацию PostgreSQL о схемах для получения дополнительной информации. Конкретно эта часть:

Вы можете создать схему для каждого пользователя с тем же именем, что и у этого пользователя. Напомним, что путь поиска по умолчанию начинается с $ user, который преобразуется в имя пользователя. Поэтому, если у каждого пользователя есть отдельная схема, он получает доступ к своим собственным схемам по умолчанию.

Если вы используете эту настройку, вы также можете отозвать доступ к общедоступной схеме (или вообще удалить ее), поэтому пользователи действительно ограничены своими собственными схемами.

Обновите свой комментарий: Вот что происходит на моей машине. Который, как я полагаю, вы хотите.

skrall=# \d
No relations found.
skrall=# show search_path;
  search_path   
----------------
 "$user",public
(1 row)

skrall=# create schema skrall;
CREATE SCHEMA
skrall=# create table test(id serial);
NOTICE:  CREATE TABLE will create implicit sequence "test_id_seq" for serial column "test.id"
CREATE TABLE
skrall=# \d
            List of relations
 Schema |    Name     |   Type   | Owner  
--------+-------------+----------+--------
 skrall | test        | table    | skrall
 skrall | test_id_seq | sequence | skrall
(2 rows)

skrall=# select * from test;
 id 
----
(0 rows)

skrall=# 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...