2017-05-03 81 views
0

我已經列定義爲:爲什麼價值不是自動生成的?

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 }是提供

+0

如果列自動生成的,你不需要添加它在插入列清單,只是把那些你手動通知。 –

+0

如果你想'默認'踢,從目標列表中刪除'uuid'列 - 但然後你永遠不會有衝突 –

+0

@a_horse_with_no_name:有沒有辦法使'UPDATE或INSERT'在我的情況下? –

回答

1

NULLDEFAULT

不同。如果你說uuid爲NULL,則數據庫不會嘗試使用默認值。

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

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

'您必須省略uuid':並且我失去了'更新或插入'的能力 –

+0

創建一個工作示例在[rextester](http://rextester.com/l/postgresql_online_compiler)中,所以我可以嘗試修復它。 –

相關問題