2017-02-06 12 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; 
相關問題