Pgsql-Dynamic-Create-Schema
Postgres : 创建schema、创建表空间与指定用户权限
1. 创建新的Schema
要创建 PostgreSQL 中的一个新的 schema,并创建一个只有该 schema 权限的新用户,请按照以下 步骤操作:
-
打开 PostgreSQL 客户端并连接到数据库服务器。
-
创建一个新的 schema,使用 CREATE SCHEMA 命令,后面紧跟着 schema 的名称。例如,要创建名为
my_schema的 schema,请运行以下命令:
CREATE SCHEMA my_schema;
- 创建一个新的用户,使用 CREATE USER 命令。例如,要创建名为 my_user 的用户,请运行以下命令:
CREATE USER my_user WITH PASSWORD 'password';
注意,上面的密码应该被替换为你希望设置的密码。
- 授予该用户对新 schema 的权限,使用 GRANT 命令。例如,要授予名为 my_user 的用户对名为
my_schema的 schema 的所有权限,请运行以下命令:
GRANT ALL ON SCHEMA my_schema TO my_user;
上面的命令将授予该用户在 my_schema 中创建、修改和删除表、视图和其他对象的权限。
- 你可以通过运行以下命令来检查是否已成功创建 schema 和用户:
\dn
\du
- 切换到新创建的用户,使用 \c 命令连接到数据库,并尝试在该用户的 schema 中创建一个新的表:
\c my_database my_user
CREATE TABLE my_schema.my_table (id SERIAL PRIMARY KEY, name TEXT);
这将在 my_user 用户的 my_schema schema 中创建一个名为 my_table 的新表。
- 现在,你可以使用 SELECT 命令查询该表并验证该用户只能在自己的 schema 中访问它:
SELECT * FROM my_schema.my_table;
如果你尝试在其他 schema 中查询该表,你将会收到一个错误。
SELECT * FROM public.my_table;
ERROR: relation "public.my_table" does not exist
LINE 1: SELECT * FROM public.my_table;
这是因为该用户没有权限在 public schema 中访问该表。 请注意,如果你希望授予该用户在其他 schema 中的访问权限,请单独为该用户授权。例如,要授予 该用户对 public schema 中的表的访问权限,请使用以下命令:
GRANT USAGE ON SCHEMA public TO my_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_user;
上述命令将授予该用户在 public schema 中的所有表上执行 SELECT 操作的权限。请注意,这不会 授予该用户对其他 schema 中的表的访问权限。