我正在将 PostgreSQL 从 9.6 升级到 13。以下脚本适用于 9.6:
BEGIN
CREATE TYPE x AS ENUM ('foo', 'bar');
ALTER TYPE x ADD VALUE 'baz';
SELECT 'baz'::x;
END;
Run Code Online (Sandbox Code Playgroud)
但 13 的结果是:
ERROR: unsafe use of new value "baz" of enum type x
LINE 1: SELECT 'baz'::x;
^
HINT: New enum values must be committed before they can be used.
Run Code Online (Sandbox Code Playgroud)
谷歌搜索表明它早于 13,但我不知道到底是哪个版本。
我很确定我有充分的理由创建枚举、添加值并在同一事务中使用该值。详情见问题末尾。
是否有任何已知的清洁解决方法?
[编辑] - 为什么我想这样做
我有一组 SQL 文件
v_0.01.sql
v_0.02.sql
v_0.03.sql
...
Run Code Online (Sandbox Code Playgroud)
是增量的,即“数据库版本 X”包含在“X 之前的所有 SQL 文件”中,例如版本 0.02 与
cat v_0.01.sql v_0.02.sql | …Run Code Online (Sandbox Code Playgroud) 问题
我所有的应用程序路由都是通过Flask-restful资源定义的。如何找到正在处理当前请求的资源对象/类?
我为什么要这个
我想记录处理请求时引发的所有异常。flask.got_request_exception如http://flask.pocoo.org/docs/1.0/api/#signals中所述,我连接到,并且类似这样的方法运行良好:
from flask import got_request_exception, request
def log_exception(sender, exception, **extra):
logger.info("URL: {}, Exception: {}".format(request.url, type(exception).__name__))
got_request_exception.connect(log_exception, app)
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我想记录一些请求数据,但不是全部数据-例如,我想隐藏密码。我认为将日志记录数据逻辑与请求处理逻辑一起使用是一个好主意,如下所示:
from flask import request
import flask_restful
class SomeResource(flask_restful.Resource):
def get(self):
# ... GET processing
def log_data(self):
# log all body params
return request.get_json()
class Login(flask_restful.Resource):
def post(self):
# ... authentication
def log_data(self):
# log selected body params
return {'login': request.get_json()['login'], 'password': 'HIDDEN!'}
Run Code Online (Sandbox Code Playgroud)
而不是在我的中使用它log_exception:
from flask import got_request_exception, request
def log_exception(sender, exception, **extra):
resource_class …Run Code Online (Sandbox Code Playgroud)