如何在Postgres中设置复合类型属性的默认值?

时间:2019-08-08 06:57:37

标签: postgresql

这是Oracle中用户定义的类型:

TYPE type_daniel IS RECORD(
     name varchar(16) := '112',
     age int :=12,
     sex int :=1
    );

我想将其移植到Postgres,但是pg不支持喜欢的语法:

create type type_daniel as (
     name varchar(16) := '112',
     age int :=12,
     sex int :=1
    );

我试图用相同的名称和默认值创建一个表:

create table test_daniel(
    name varchar(10),
    age int,
    sex int default 1
);

但是当我在过程中将其用作变量时:

create or replace procedure test_daniel_func() as $$
    declare
        vrow test_daniel;
    begin
        vrow.name:='jzy';
        vrow.age:=23;
        raise notice '%,%',vrow.name,vrow.sex;
end
    $$
    language plpgsql;

然后我将此过程称为

我希望输出为jzy,1,但实际输出为jzy,NULL

那么,如何在postgres中设置复合类型属性的默认值?

1 个答案:

答案 0 :(得分:0)

除非您用C编写类型,否则我认为您无法做到这一点。

您必须显式初始化值。如果您在表定义中使用类型,则BEFORE触发器可以为您完成此操作。