2016-08-06 79 views
5

Ich benutze Postgresql und yii2-Framework. Nun bekam ich eine sehr interessante Fehlermeldung:Postgres Fehler: Null-Wert in der Spalte "ID" - während der Einfügeoperation

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). 

Aber ich meinen Befehl Einfügen überprüft, und es gibt nicht „id“ -Spalte gibt!

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" 

Also ich kann diese Fehlermeldung wirklich nicht verstehen. Ich finde nicht, dass die Postgres oder Yii versuchen, einen Null-ID-Wert oder was einzufügen.

Durch die Art und Weise hier können Sie die Struktur

            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) 

finden Was ist Ihr Rat? Wo soll ich nach dem Problem suchen?

Antwort

6

Sie fügen keinen Wert für id ein. Da Sie es nicht explizit festlegen, wird implizit ein null Wert angegeben, der natürlich kein gültiger Wert für eine Primärschlüsselspalte ist. Sie können diese ganze Situation vermeiden, indem Sie diese Spalte als serial anstelle eines einfachen alten integer definieren und das gesamte Heavy Lifting der Datenbank überlassen.