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