2017-05-03 17 views
0

私は列として定義されています:値が自動生成されないのはなぜですか?

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

コード::私はエラーを取得するNULL値を挿入しようとすると、

not null default uuid_generate_v4() 

 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 }

+0

を使用uuidフィールドを省略しなければなりません。 –

+0

'default'を起動させたい場合は、' uuid'カラムをターゲットリストから削除してください。でも、とにかく矛盾が生じることはありません。 –

+0

@a_horse_with_no_name:私の場合は 'UPDATE OR INSERT'を行う方法はありますか? ? –

答えて

1

NULLを提供された場合は、レコードを更新するには、あなたがuuidがNULLであると言うなら、文句を言わないDEFAULT値を使用しようとDB DEFAULT

に異なっています。

あなたは列があなたがちょうどあなたが手動で通知されたものを入れて、挿入列リストに追加する必要はありません自動生成された場合ので、DBはDEFAULT

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

の '$ self - > {uuid}'に 'uuid'を省略する必要があります:' UPDATEまたはINSERT'機能を失うように思われる –

+0

作業サンプルを作成してください[rextester](http://rextester.com/l/postgresql_online_compiler)にあるので、私はそれを試して修正することができます。 –

関連する問題