Adonis与PostgreSQL迁移报错:public schema权限不足问题排查
PostgreSQL权限问题排查(Adonis+Docker场景)
问题1:权限拒绝原因及初始化SQL补充配置
权限拒绝的核心是PostgreSQL的权限分层逻辑:
- 你仅给
adonis用户授予了数据库级的全部权限,但表、序列等对象实际存储在schema(默认是public)下,publicschema的默认操作权限仅属于超级用户postgres,adonis用户没有在该schema下创建表、序列的权限。 - 初始化SQL确实缺少schema层面的权限配置,
adonis用户默认不会拥有publicschema的创建/操作权限,必须显式授予。
修正后的初始化SQL需补充schema权限:
CREATE USER adonis WITH ENCRYPTED PASSWORD 'adonis'; CREATE DATABASE adonis_app; GRANT ALL PRIVILEGES ON DATABASE adonis_app TO adonis; -- 授予public schema的操作权限 GRANT ALL PRIVILEGES ON SCHEMA public TO adonis; -- 让后续创建的表默认给adonis权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO adonis; -- 让后续创建的序列(serial类型依赖)默认给adonis权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO adonis;
问题2:操作是否有误或教程遗漏
你的操作完全正确,问题出在教程的内容遗漏:
入门教程常简化PostgreSQL的权限模型,只覆盖数据库级权限授予,但忽略了schema是实际存储对象的层级,建表、执行迁移必须要有对应schema的操作权限。
内容的提问来源于stack exchange,提问作者IARI
相关产品推荐
相关产品推荐

