Sql 在插入之前,如何更改触发器函数中复合类型列的值?

Sql 在插入之前,如何更改触发器函数中复合类型列的值?,sql,postgresql,Sql,Postgresql,我有一个包含以下列的表: inspireId类型:inspireId(复合类型) gid类型:整数(主键) inspireId列类型如下所示: CREATE TYPE inspireId AS ( nameSpace text, local_id integer ) CREATE OR REPLACE FUNCTION script.addLocalId() RETURNS TRIGGER AS $$ BEGIN NEW."inspireId".local_id

我有一个包含以下列的表:

  • inspireId类型:inspireId(复合类型)
  • gid类型:整数(主键)
  • inspireId列类型如下所示:

    CREATE TYPE inspireId AS (
      nameSpace text,
      local_id integer
    )
    
    CREATE OR REPLACE FUNCTION script.addLocalId() RETURNS TRIGGER AS
    $$
        BEGIN
            NEW."inspireId".local_id := NEW.gid;
            RETURN NEW;
        END;
    $$ LANGUAGE plpgsql;
    
    在表中创建新行时,我想用gid的值自动填充local_id

    我尝试了以下方法:

    CREATE TYPE inspireId AS (
      nameSpace text,
      local_id integer
    )
    
    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»不是已知变量


    正确的语法是什么?

    您不能直接访问type元素

    CREATE OR REPLACE FUNCTION script.addLocalId() RETURNS TRIGGER AS
    $$
        BEGIN
            NEW."inspireId" = ((NEW.inspireId).nameSpace, NEW.gid)::inspireId;
            RETURN NEW;
        END;
    $$ LANGUAGE plpgsql;
    
    可能重复的