我在 Postgres 17 数据库中有一个表:
CREATE TABLE customerdevices (
"deviceID" serial PRIMARY KEY
, "barcode" varchar(50)
-- more columns
);
barcode
将是 Code128 条形码的文本表示形式。
本质上,我正在尝试执行以下操作:
创建新行时,我希望通过将自动生成的
barcode
与特定于表的前缀连接起来来自动填充 deviceID
。 (我有几个不同的表想要实现此功能)。
我的方法是创建一个触发函数并为此触发:
CREATE OR REPLACE FUNCTION generate_barcode(pref VARCHAR, id INTEGER)
RETURNS TRIGGER
LANGUAGE plpgsql
CALLED ON NULL INPUT
AS $$
BEGIN
NEW.barcode := pref || id;
RETURN NEW;
END;
$$;
CREATE TRIGGER autoGenerateCustomerDeviceBarcode
BEFORE INSERT ON customerdevices
FOR EACH ROW
EXECUTE FUNCTION
generate_barcode('C', NEW.deviceID);
但是,当我运行脚本时,它输出一个错误:
“$$ BEGIN”处或附近的未终止的美元引号字符串
我尝试了该函数的多次迭代,但总是得到相同的错误。我对 Postgres 相当陌生,对 SQLite 和 Oracle 更熟悉。
我将我的代码通过 Chat-GPT 并根据其建议我:
尽管如此,在完成所有这些操作后,我仍然遇到同样的错误。此时,我认为创建一个条形码表并将不同表中的所有条形码合并在一起可能会更容易,但如果确实有一种方法可以这样做,我会更喜欢它。