it-swarm.com.de

Postgres-Fehler: Nullwert in Spalte "id" - während des Einfügevorgangs

Ich verwende postgresql und yii2 framework ..__ Nun, ich habe eine sehr interessante Fehlermeldung erhalten:

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 habe meinen Befehl zum Einfügen überprüft, und es gibt keine Spalte "ID"!

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"

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

Übrigens finden Sie hier 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)

Wie lautet dein Rat? Wo soll ich nach dem Problem suchen?

8
Dabagab

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 gesamte Situation vermeiden, indem Sie diese Spalte als serial anstelle einer einfachen alten integer definieren und die gesamte Last der Datenbank überlassen.

14
Mureinik

Das Schlüsselwort serial wird zur Analysezeit erweitert und ist danach nicht mehr sichtbar.

Ab der Version Postgresql 10 gibt es folgende Alternative:

id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY

Es soll dem SQL-Standard entsprechen und somit mit Oracle kompatibel sein.

Weitere Informationen finden Sie in diesem Blog .

2
Stephane

Ändern Sie Ihren vorhandenen Primärschlüssel in serial. Lesen Sie dies, um es zu ändern 

Primärschlüssel in seriell ändern

0
vipin cp

Wenn Sie nicht zu serial wechseln können, weil Gründe wie Client, Management, DB-Rechte ...

Die Datenbank verwendet wahrscheinlich sequence.

Was Sie darüber wissen sollten: SELECT nextval('seq_nuu_filtreelement')

Lesen :

Ich habe es nicht geschafft, pg_catalog.pg_get_serial_sequence('schema.table', 'id') zum Laufen zu bringen.

So habe ich die Sequenzen in meinem Datenbank Explorer gefunden und benutze den Befehl:

SELECT nextval('seq_table_name')

0
Poutrathor