postgres=> create schema ecuac;
ERROR: permission denied for database postgres
这个错误表明你正在尝试在 postgres 数据库上创建 schema,但是你的用户 erp_etl 没有足够的权限来在 postgres 数据库上执行此操作。postgres 数据库是 PostgreSQL 的系统数据库,通常不建议在其中创建用户 schema 或其他对象,除非你确切知道你在做什么。
如果你想要在另一个数据库中创建 schema,比如叫做 mydatabase 的数据库,你需要首先确保你连接到了正确的数据库,然后再次尝试创建 schema。以下是如何做到这一点的步骤:
使用有权限的账号 psql 连接到正确的数据库:
输入密码后,你应该在 mydatabase 数据库的上下文中。现在,尝试创建 schema:
CREATE SCHEMA ecuac;
如果你收到关于权限的错误,你需要确保 erp_etl 用户有足够的权限在 mydatabase 上创建 schema。你可以通过以下 SQL 语句给 erp_etl 用户授予这些权限:
-- 作为数据库所有者(通常是 postgres 用户)登录
GRANT USAGE, CREATE ON SCHEMA public TO erp_etl; -- 允许在 public schema 中创建对象
-- 如果你想允许在名为 ecuac 的 schema 中创建对象(但首先你需要创建它)
CREATE SCHEMA ecuac;
GRANT USAGE, CREATE ON SCHEMA ecuac TO erp_etl;
注意,USAGE 权限允许用户访问 schema 中的对象,而 CREATE 权限允许用户在该 schema 中创建新对象。如果你只想允许在 public schema 中创建对象,那么你只需要授予 public schema 的权限。
或者
使用具有足够权限的用户(如 postgres)登录到数据库。
psql -d mydatabase -h 10.10.10.2 -p 1921 -U postgres
给用户授予权限:
给用户 erp_etl 在 mydatabase 数据库中创建 schema 的权限:
GRANT CREATE ON DATABASE mydatabase TO erp_etl;
创建一个新的 schema 并给 erp_etl 权限:
CREATE SCHEMA ecuac;
GRANT USAGE, CREATE ON SCHEMA ecuac TO erp_etl;
这里,USAGE 权限允许用户访问 schema 中的对象,而 CREATE 权限允许用户在该 schema 中创建新对象。
然后再让用户 erp_etl 登录并尝试创建 schema: