使用Flask-SQLAlchemy初始化数据库时遇log_statement_stats权限错误
解决Flask-SQLAlchemy连接PostgreSQL时的log_statement_stats权限错误
问题原因
你遇到的错误不是数据表/ schema权限不足,而是普通数据库用户没有权限设置log_statement_stats这个PostgreSQL系统参数。psycopg2(Python的PostgreSQL驱动)在连接时可能自动尝试设置该参数,触发权限拒绝。
解决方案
方法1:修改连接字符串,强制关闭该参数
在数据库连接字符串的options中添加-c log_statement_stats=off,同时保留你的search_path设置:
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://prodcent_user:XXXXX@SERVER:5432/appdata?options=-search_path=datamanager -c log_statement_stats=off"
方法2:通过SQLAlchemy连接参数配置
如果方法1无效,可直接在SQLAlchemy的引擎选项中指定:
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = { 'connect_args': { 'options': '-c log_statement_stats=off' } }
注:若连接字符串中已设置options,两者会合并生效。
为什么之前的权限设置无效
你之前授予用户的是datamanager schema下的表、序列、函数权限,这些仅影响数据操作权限,和系统参数设置权限完全无关。log_statement_stats属于PostgreSQL全局配置参数,只有超级用户或拥有ALTER SYSTEM权限的用户才能修改,普通应用用户无需也不应拥有该权限。
内容的提问来源于stack exchange,提问作者Duncan Pullen
相关产品推荐
相关产品推荐

