我已连接到具有
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 上看到我没有授予气流的所有公共模式......
grant all on database airflow to airflow;
听起来很强大,但作用不大。该角色仍然需要对数据库内的架构、表以及可能更多对象的额外权限。
特别是,您的错误消息显示:
模式公共的权限被拒绝
因此,您(至少)需要架构
CREATE
的 public
权限。直接或通过授予PUBLIC
的方式。喜欢:
GRANT CREATE ON SCHEMA public TO airflow;
删除公共模式的并且:
PUBLIC
创建权限(Noah Misch)
将您仍然可以按照自己喜欢的方式进行更改。这只是新的、更安全、更严格的默认设置。请点击链接了解详情。
public
架构的所有者更改为新的pg_database_owner
角色 (Noah Misch)
但这不适用于 Postgres 14。您必须自己以某种方式删除了权限。
将数据库气流所有者更改为气流;