gpt4 book ai didi

python - 在使用用 PL/Python 编写的 bool 存储过程的 PostgreSQL CHECK 约束中,可以更新错误消息的详细信息吗?

转载 作者:行者123 更新时间:2023-11-29 12:41:33 26 4
gpt4 key购买 nike

问题在(虽然很长)标题中。我有这种方式的代码:

-- create the tables for models
CREATE TABLE invoice(
id SERIAL PRIMARY KEY,
value VARCHAR(8)
CONSTRAINT valid_money CHECK(validate_invoice_money(value))
);

使用此过程:

CREATE OR REPLACE FUNCTION validate_invoice_money(test VARCHAR) RETURNS BOOLEAN AS $$
import plpy
import re

if (re.match("^[0-9]+\\.[0-9]{2}$", test) == None):
return False

return True
$$ LANGUAGE plpython3u IMMUTABLE;

(这个例子的细节并不重要,我知道有比这更好的方法来验证一个值,比如使用 MONEY 类型。)

当尝试插入未通过此检查时,我收到以下错误:

ERROR  : new row for relation "invoice" violates check constraint "valid_model"
DETAIL : Failing row contains (1, "notvalid").

(错误/详细信息描述符是我自己的代码,但 PostgreSQL 错误有错误和提供的详细信息字段。)

我有什么方法可以从我的 Python 程序中更改此错误的“详细信息”部分吗?

最佳答案

在 Postgres 9.6+ 中,您可以使用 utility functions, 从 plpython 函数中使用详细消息引发错误例如:

CREATE OR REPLACE FUNCTION validate_invoice_money(test VARCHAR) 
RETURNS BOOLEAN AS $$
import re

if (re.match("^[0-9]+\\.[0-9]{2}$", test) == None):
plpy.error("custom exception message",
detail="some info about exception",
hint="hint for users")
return False

return True
$$ LANGUAGE plpython3u IMMUTABLE;

insert into invoice
values (default, 'notvalid');

ERROR: plpy.Error: custom exception message
DETAIL: some info about exception
HINT: hint for users
CONTEXT: Traceback (most recent call last):
PL/Python function "validate_invoice_money", line 8, in <module>
hint="hint for users")
PL/Python function "validate_invoice_money"

关于python - 在使用用 PL/Python 编写的 bool 存储过程的 PostgreSQL CHECK 约束中,可以更新错误消息的详细信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47972594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com