Postgres:有没有办法将用户绑定到架构?

时间:2010-02-26 16:16:49

标签: sql database postgresql schema

在我们的数据库中,我们有用户:A,B,C。

每个用户都有自己的对应架构:A,B,C。

通常,如果我想从其中一个模式中的表中选择,我将不得不这样做:

select * from A.table;

我的问题是:

有没有办法:

select * from table

根据登录的用户转到正确的架构?

1 个答案:

答案 0 :(得分:2)

这是PostgreSQL的默认行为。确保您的search_path设置正确。

SHOW search_path;

默认情况下应该是:

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

有关详细信息,请参阅PostgreSQL的documentation模式。特别是这部分:

  

您可以为每个用户创建一个与该用户同名的架构。回想一下,默认搜索路径以$ 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=#