代码之家  ›  专栏  ›  技术社区  ›  mainstringargs

Postgres:有没有办法把用户和模式联系起来?

  •  1
  • mainstringargs  · 技术社区  · 14 年前

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

    每个用户都有自己的对应模式:A、B、C。

    通常,如果我想从一个模式中的一个表中进行选择,我必须这样做:

    select * from A.table;
    

    我的问题是:

    有没有办法:

    select * from table

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Steve K    14 年前

    这是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=#