【发布时间】:2011-01-21 12:41:43
【问题描述】:
在我们的数据库中,我们有用户:A、B、C。
每个用户都有自己对应的架构:A、B、C。
通常,如果我想从其中一种模式的表中进行选择,我必须这样做:
select * from A.table;
我的问题是:
有没有办法制作:
select * from table
根据登录的用户转到正确的架构?
【问题讨论】:
标签: sql database postgresql schema
在我们的数据库中,我们有用户:A、B、C。
每个用户都有自己对应的架构:A、B、C。
通常,如果我想从其中一种模式的表中进行选择,我必须这样做:
select * from A.table;
我的问题是:
有没有办法制作:
select * from table
根据登录的用户转到正确的架构?
【问题讨论】:
标签: sql database postgresql schema
这是 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=#
【讨论】: