Database error: (psycopg2.errors.InsufficientPrivilege) permission denied for sequence demo_id_seq

[SQL: INSERT INTO test(demo_id, message, created_at) VALUES (%(demo_id)s, %(message)s, %(created_at)s) RETURNING test.id]
[parameters: {‘demo_id’: ‘4e586b7f-4ee8-41c7-a0db-443a9cc1ec00’, ‘message’: None, ‘created_at’: datetime.datetime(2025, 11, 26, 6, 33, 19, tzinfo=datetime.timezone.utc)}]
(Background on this error at: https://sqlalche.me/e/20/f405)

错误信息

Database error: (psycopg2.errors.InsufficientPrivilege) permission denied for sequence demo_id_seq

意思是 当前数据库用户没有权限访问或使用 PostgreSQL 中的 demo_id_seq序列。

这是典型的 权限不足问题。在 PostgreSQL 中,表的自增主键通常依赖一个序列,例如 test.id 可能是 SERIAL 或 BIGSERIAL 类型,它会自动使用 demo_id_seq生成新 ID。

原因分析

插入数据到 test 时,需要调用 demo_id_seq.nextval 来生成新的 id。

当前连接的数据库用户没有 USAGE 或 UPDATE 权限 对这个序列。

因此抛出 permission denied for sequence。

解决方法

假设你的数据库用户是 myuser,数据库名是 mydb,执行以下 SQL 授权即可:

GRANT USAGE, SELECT, UPDATE ON SEQUENCE demo_id_seq TO myuser;

USAGE:允许访问序列。

SELECT:允许查看当前序列值。

UPDATE:允许调用 nextval(),即生成新的自增 ID。

 

作者 admin

百度广告效果展示