2016-08-06 1 views
5

Я использую рамки postgresql и yii2. Ну я получил очень интересное сообщение об ошибке:Ошибка Postgres: значение null в столбце «id» - во время операции вставки

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "id" violates not-null constraint 
DETAIL: Failing row contains (null, 1, null, null, null, null, 1, Demo, , , , 1998-01-01, , , , 345345435453453, , , , , 1, , , f, f, f, f, 10, f, 1, f, f, f, null, null, null, 1470477479, 1470477479, null). 

Но я проверил мою команду Вставить, и не столбец «Идентификатор» есть!

INSERT INTO "advertiser" ("languages", "type", "name", "display_name", "title", "about", "birthday", "gender", "country_id", "county_id", "city_id", "city_part", "street", "house_number", "phone", "public_email", "public_url", "motto", "message", "im_facebook", "im_skype", "has_viber", "has_whatsapp", "has_sms_response", "visible_birthday", "is_checked", "status", "version", "user_id", "created_at", "updated_at") VALUES (NULL, 1, 'Demo', '', '', '', '1998-01-01', 1, NULL, NULL, NULL, '', '', '', '345345435453453', '', '', '', '', '', '', FALSE, FALSE, FALSE, FALSE, FALSE, 10, NULL, 1, 1470477479, 1470477479) RETURNING "id" 

Так что я действительно не могу понять это сообщение об ошибке. Я не считаю, что Postgres или Yii пытаются вставить значение нулевого идентификатора или что.

Кстати здесь вы можете найти структуру

            Table "public.advertiser" 
     Column   |   Type   |   Modifiers   | Storage | Stats target | Description 
-----------------------+------------------------+---------------------------------+----------+--------------+------------- 
id     | integer    | not null      | plain |    | 
user_id    | integer    |         | plain |    | 
country_id   | integer    |         | plain |    | 
county_id    | integer    |         | plain |    | 
city_id    | integer    |         | plain |    | 
district_id   | integer    |         | plain |    | 
type     | smallint    |         | plain |    | 
name     | character varying(255) | not null      | extended |    | 
display_name   | character varying(255) | default NULL::character varying | extended |    | 
title     | character varying(255) | default NULL::character varying | extended |    | 
about     | text     |         | extended |    | 
birthday    | date     | not null      | plain |    | 
city_part    | character varying(255) | default NULL::character varying | extended |    | 
street    | character varying(255) | default NULL::character varying | extended |    | 
house_number   | character varying(20) | default NULL::character varying | extended |    | 
phone     | character varying(15) | not null      | extended |    | 
public_email   | character varying(255) | default NULL::character varying | extended |    | 
public_url   | character varying(255) | default NULL::character varying | extended |    | 
motto     | character varying(255) | default NULL::character varying | extended |    | 
message    | text     |         | extended |    | 
gender    | smallint    | not null default 1    | plain |    | 
im_facebook   | character varying(255) | default NULL::character varying | extended |    | 
im_skype    | character varying(255) | default NULL::character varying | extended |    | 
has_viber    | boolean    | not null default false   | plain |    | 
has_whatsapp   | boolean    | not null default false   | plain |    | 
has_sms_response  | boolean    | not null default false   | plain |    | 
visible_birthday  | boolean    | not null default false   | plain |    | 
status    | smallint    | not null default 10    | plain |    | 
is_checked   | boolean    | not null default false   | plain |    | 
geo_latitude   | double precision  |         | plain |    | 
geo_longitude   | double precision  |         | plain |    | 
languages    | integer[]    |         | extended |    | 
created_at   | integer    |         | plain |    | 
updated_at   | integer    |         | plain |    | 
version    | bigint     | default 0      | plain |    | 
Indexes: 
    "advertiser_pkey" PRIMARY KEY, btree (id) 

Что вы посоветуете? Где я должен искать проблему?

ответ

6

Вы не вставляете значение для id. Поскольку вы явно не устанавливаете его, неявно задано значение null, что, конечно же, не является допустимым значением для столбца первичного ключа. Вы можете избежать всей этой ситуации, указав этот столбец как serial вместо простого старого integer, и оставьте весь тяжелый подъем в базу данных.