Postgresql
錯誤消息中缺少非空約束的名稱
該關係是在 Postgres 9.6 中使用以下命令創建的:
CREATE TABLE import_event ( import_event_id BIGINT NOT NULL, filename VARCHAR (200) CONSTRAINT NN_import_event__filename NOT NULL ); ALTER TABLE ONLY import_event ADD CONSTRAINT PK_import_cak_key PRIMARY KEY (import_event_id);
請注意,命名了 not null 約束。
然後執行了以下命令
insert into import_event (import_event_id) values (1);
當然,引發了約束違反錯誤。留言內容如下
ERROR: null value in column "filename" violates not-null constraint DETAIL: Failing row contains (1, null).**strong text**
問題是該消息中缺少非空約束的名稱。但是,正確的錯誤消息:
ERROR: new row for relation "import_event" violates check constraint "nn_import_event__filename"
當非空約束聲明如下時產生
ALTER TABLE ONLY import_event ADD CONSTRAINT NN_import_event__filename CHECK(filename IS NOT NULL);
這是 Postgres 9.6 中的錯誤還是約束聲明有問題?
據我所知,這一點
CONSTRAINT NN_import_event__filename
只是被忽略了。當我轉儲數據庫時,該名稱
nn_import_event__filename
不存在,僅保留非空屬性。這與文件中給出的範例不匹配,該範例 聲稱可以命名
not null
約束。在表distributors上定義兩個NOT NULL列約束,其中一個被顯式地命名:
CREATE TABLE 分銷商 ( 沒有整數約束 no_null NOT NULL, 名稱 varchar(40) NOT NULL );
所以,你發現了一個錯誤。如果您報告它,它可能會很快得到糾正,但修復可能只是對文件的更新。