当我尝试执行此脚本时,出现错误: 错误:关系“旧”不存在。 脚本:
$dsn=$_REQUEST['Device_Serial_Number'];
$sql = "SELECT Device_ID, Energy_kwh, Data_Datetime, Device_Serial_Number FROM ads_device_data WHERE Data_Datetime BETWEEN '2016-12-06' and '2016-12-07' and Device_Serial_Number='$dsn'";
$result = mysqli_query($con,$sql);
$data = [];
if($result)
{
while($row = mysqli_fetch_array($result))
{
$serial = $row['Device_Serial_Number'];
$x = $row['Data_Datetime'];
$y = $row['Energy_kwh'];
$data[] = ['x' => $x , 'y' => (float)$y];
}
mysqli_free_result($result);
}
mysqli_close($con);
$json = json_encode($data);
我发现了一些这样的问题,但是他们没有帮助我。 我的触发器:
update organization
set row_status = 30;
答案 0 :(得分:2)
对于第一个INSERT
,请使用类似
INSERT INTO organization_history VALUES (OLD.*);
DELETE
和第二个INSERT
构思错误 - 例如,这会导致organization
表格中出现大量不必要的流失。
使用BEFORE
触发器,向NEW.version
添加1并返回NEW
会更好。这将导致在将记录写入表之前调整值。
答案 1 :(得分:0)
您误解了OLD
和NEW
的内容:那些不是表,是行已插入或修改过。
但是您不需要删除并插入所有内容。只需在 BEFORE 触发器中增加版本。
然后您可以将触发器简化为:
create or replace function pmigratedatatohistory()
returns trigger as $$
BEGIN
insert into organization_history values (old.*);
new.version := new.version + 1; -- increment the version
return new;
END;
$$
LANGUAGE plpgsql;
您需要 BEFORE 触发器:
create trigger trmigratedatatohistory BEFORE update or delete ON organization
for each row execute procedure pmigratedatatohistory();
删除行时的过程对我没有意义。当前代码执行以下操作:
delete from organization
并删除该行after
触发器,因此该行已经从表中消失了)通过简单地递增before触发器中的版本,可以实现相同的行为。如果您想完全阻止删除,只需在之前的触发器中返回null
:
create or replace function pmigratedatatohistory()
returns trigger as $$
BEGIN
insert into organization_history values (old.*);
new.version := new.version + 1; -- increment the version
if TG_OP = 'DELETE' then
return null; -- "cancel" the delete
else
return new;
endif;
END;
$$
LANGUAGE plpgsql;