问题是Rails迁移添加触发器时从正则表达式中去掉了反斜杠。
在迁移中使用以下语法:
sql = <<-SQL
CREATE OR REPLACE FUNCTION validate_postal_code() RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
BEGIN
IF NEW.postal_code !~ '^\d{5}$' THEN
RAISE EXCEPTION 'Debug--> postal_code regex check %, %, %', NEW.postal_code !~* '^\d{5}$', TG_OP, NEW.postal_code;
END IF;
RETURN NEW;
END;
$$;
DROP TRIGGER IF EXISTS validate_postal_code_trigger on my_table;
CREATE TRIGGER validate_postal_code_trigger BEFORE INSERT ON my_table
FOR EACH ROW EXECUTE PROCEDURE validate_postal_code();
SQL
execute sql
在Rails迁移中,我去掉了正则表达式中的反斜杠。应用于数据库的实际正则表达式是
'^d{5}$'
(缺少反斜杠)而不是
'^\d{5}$'