为什么价值不会自动生成?

时间:2017-05-03 16:09:46

标签: postgresql

我将列定义为:

not null default uuid_generate_v4()

当我尝试插入NULL值时,我收到错误:

DBD::Pg::st execute failed: ERROR:  null value in column "uuid" violates not-null constraint

代码:

        INSERT INTO files( uuid, storage, type, user_id, extra )
        VALUES( ?,?,?,?,? )
        ON CONFLICT( uuid ) DO UPDATE SET
           storage = EXCLUDED.storage,
           type    = EXCLUDED.type,
           user_id = EXCLUDED.user_id,
           extra   = EXCLUDED.extra
        RETURNING *
      SQL
      ,$self->{ uuid }
      ,$self->storage .""
      ,ref $self
      ,$self->{ owner_id }
      ,JSON::XS->new->allow_nonref->encode( $args{ extra } // {} )

我很困惑。 如果尚未定义$self->{ uuid },如何创建新行。如果提供了$self->{ uuid },如何更新记录

1 个答案:

答案 0 :(得分:1)

NULLDEFAULT

不同

如果你说uuid为NULL,那么db不会尝试使用DEFAULT值。

您必须省略uuid字段,以便DB使用DEFAULT

INSERT INTO files( storage, type, user_id, extra )