在我们的数据库中,我们有用户:A,B,C。
每个用户都有自己的对应架构:A,B,C。
通常,如果我想从其中一个模式中的表中选择,我将不得不这样做:
select * from A.table;
我的问题是:
有没有办法:
select * from table
根据登录的用户转到正确的架构?
答案 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=#