gpt4 book ai didi

postgresql - 在 `INSERT` 语句之前自动操作行

转载 作者:行者123 更新时间:2023-11-29 12:37:32 24 4
gpt4 key购买 nike

我正在寻找一种在将行添加到 postgreSQL 中的表之前自动操作行的方法。比如说我们有下表:

CREATE TABLE foo (
id serial NOT NULL,
value integer NOT NULL,
CONSTRAINT "Foo_pkey" PRIMARY KEY (id),
CONSTRAINT "Foo_value_check" CHECK (value >= 0)
)

现在可以插入行了:

INSERT INTO foo (id,value) VALUES ('0','2')

当一个人进入时:

INSERT INTO foo (id,value) VALUES ('1','-2')

会发生错误。是否可以定义一个“重写规则”,给定 value 列包含小于零的值,使用零(例如)?

最佳答案

是的,这是可能的。一种方法是使用触发器。触发器会导致针对特定操作运行过程,这可以让您修改要插入的数据(除其他外)。

要设置触发器,您首先要创建一个函数来执行您想要的检查和修改。函数中的变量 new 将被隐式声明并包含要插入/更新的新行,因此您可以在值到达表之前检查和修改它们。

然后您指定在插入或更新一个或多个表之前调用此函数。

例子:

CREATE FUNCTION validate_foo_row()
RETURNS TRIGGER AS $$
BEGIN
IF new.value<0 THEN
new.value=0;
END IF;
RETURN NEW;
END
$$ LANGUAGE 'plpgsql';

CREATE TRIGGER trig_validate_foo BEFORE INSERT ON foo
FOR EACH ROW EXECUTE PROCEDURE validate_foo_row();

SqlFiddle Here

上面的简单示例仅触发插入,您可能希望它也触发更新。

您可以阅读有关触发器的更多信息 in the postgresql manual .它们非常强大,能够做的远不止这个简单的示例所示。

关于postgresql - 在 `INSERT` 语句之前自动操作行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346515/

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