2016-08-06 13 views
5

Używam frameworków postgresql i yii2. Cóż mam bardzo ciekawy komunikat o błędzie:Błąd PostgreS: wartość pusta w kolumnie "id" - podczas operacji wstawiania

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

Ale sprawdziłem moje polecenie Wstaw, a tam nie ma „id” kolumna!

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" 

Naprawdę nie mogę zrozumieć tego komunikatu o błędzie. Nie stwierdzam, że Postgres lub Yii próbują wstawić wartość Null ID lub co.

Nawiasem mówiąc tutaj można znaleźć 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) 

Jaka jest twoja rada? Gdzie powinienem szukać problemu?

Odpowiedz

6

Nie wstawiasz wartości dla id. Ponieważ nie jest to jawnie ustawione, jego wartość domyślna ma wartość null, co oczywiście nie jest poprawną wartością dla klucza klucza podstawowego. Możesz uniknąć tej całej sytuacji, definiując tę ​​kolumnę jako serial zamiast zwykłego starego integer i pozostawiając cały ciężar podnoszenia do bazy danych.

Powiązane problemy