Postgresql

錯誤消息中缺少非空約束的名稱

  • June 12, 2018

該關係是在 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
);

所以,你發現了一個錯誤。如果您報告它,它可能會很快得到糾正,但修復可能只是對文件的更新。

引用自:https://dba.stackexchange.com/questions/209305