2017-02-06 11 views
0

我有它具有以下的表:如何在插入之前更改触发函数内复合类型列的值?

  1. inspireId 类型:inspireid(复合型)
  2. GID 类型:整数(主键)

的inspireId柱类型如下:

CREATE TYPE inspireId AS (
    nameSpace text, 
    local_id integer 
) 

I希望在表中创建新行时自动使用gid的值填充local_id。

我试过如下:

CREATE OR REPLACE FUNCTION script.addLocalId() RETURNS TRIGGER AS 
$$ 
    BEGIN 
     NEW."inspireId".local_id := NEW.gid; 
     RETURN NEW; 
    END; 
$$ LANGUAGE plpgsql; 

但是,这是行不通的。创建触发功能时引发以下错误:

«new.inspireId.local_id»不是已知变量。

什么是正确的语法?

+1

[访问复合数组元素plpgsql]的可能副本(http://stackoverflow.com/questions/39029020/access-composite-array-elements-plpgsql) –

回答

1

您不能直接访问类型元素。

CREATE OR REPLACE FUNCTION script.addLocalId() RETURNS TRIGGER AS 
$$ 
    BEGIN 
     NEW."inspireId" = ((NEW.inspireId).nameSpace, NEW.gid)::inspireId; 
     RETURN NEW; 
    END; 
$$ LANGUAGE plpgsql; 
相关问题