我已连接到具有
postgres
角色的 Postgres 14 实例。我创建了一个名为 airflow
的新数据库和一个名为 airflow
的新用户/角色,他是数据库的所有者。
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+---------------------------------
airflow | airflow | UTF8 | en_HK.UTF-8 | en_HK.UTF-8 |
我已经发出命令
grant all on database airflow to airflow;
然后我有:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+---------------------------------
airflow | airflow | UTF8 | en_HK.UTF-8 | en_HK.UTF-8 | =Tc/airflow +
| | | | | airflow=CTc/airflow
但是我仍然得到这个错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InsufficientPrivilege) permission denied for schema public
LINE 2: CREATE TABLE log (
^
[SQL:
CREATE TABLE log (
id SERIAL NOT NULL,
dttm TIMESTAMP WITH TIME ZONE,
dag_id VARCHAR(250),
task_id VARCHAR(250),
map_index INTEGER,
event VARCHAR(30),
execution_date TIMESTAMP WITH TIME ZONE,
owner VARCHAR(500),
extra TEXT,
CONSTRAINT log_pkey PRIMARY KEY (id)
)
]
(此错误的背景信息:https://sqlalche.me/e/14/f405)
我正在以
airflow
用户的身份连接到实例到 airflow
数据库。
更新:刚刚在 pgAdmin 上看到我没有在 PUBLIC 模式上授予所有气流 ...
grant all on database airflow to airflow;
听起来很强大,但并没有那么多。该角色仍然需要对模式、表以及数据库中可能的更多对象的额外权限。
特别是,您的错误消息说:
public 模式权限被拒绝
所以你(至少)需要对模式
CREATE
的public
特权。直接或通过授予PUBLIC
的方式。喜欢:
GRANT CREATE ON SCHEMA public TO airflow;
Postgres 15 的重要更新! 发行说明:
删除
公共模式的创建权限(Noah Misch)PUBLIC
和:
将
模式的所有者更改为新的public
角色(Noah Misch)pg_database_owner
您仍然可以按照自己喜欢的方式进行更改。它只是新的、更安全、更具限制性的默认设置。点击链接了解详情。
但这不适用于 Postgres 14。您必须以某种方式自己删除了权限。
相关: