2013-01-21 32 views
1
工作

我試圖運行在Postgres的這一說法:INSERT與缺省的標識不PostgreSQL的

insert into field (id, name) values (DEFAULT, 'Me') 

,我得到這個錯誤:

ERROR: null value in column "id" violates not-null constraint 

我最後不得不手動設置ID 。這個問題是當我的應用程序插入一條記錄時,我得到一個重複的鍵錯誤。我正在使用Play框架和ebean ORM構建一個Java應用程序。所以整個模式由ebean自動生成。在這種情況下,將記錄手動插入到數據庫中的最佳做法是什麼?

編輯:
這裏是我如何創建我的領域類

@Entity 
public class Field { 
    @id 
    public Long id; 
    public String name; 
} 

編輯:
我檢查了field_seq序列,它看起來像這樣:

CREATE SEQUENCE public.field_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; 

編輯:
這是在pgAdmin III中生成的SQL:

CREATE TABLE field 
(
    id bigint NOT NULL, 
    created timestamp without time zone, 
    modified timestamp without time zone, 
    name character varying(255), 
    enabled boolean, 
    auto_set boolean, 
    section character varying(17), 
    input_type character varying(8), 
    user_id bigint, 
    CONSTRAINT pk_field PRIMARY KEY (id), 
    CONSTRAINT fk_field_user_3 FOREIGN KEY (user_id) 
     REFERENCES account (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT ck_field_input_type CHECK (input_type::text = ANY (ARRAY['TEXT'::character varying, 'TEXTAREA'::character varying]::text[])), 
    CONSTRAINT ck_field_section CHECK (section::text = ANY (ARRAY['MAIN_CONTACT_INFO'::character varying, 'PARTICIPANT_INFO'::character varying]::text[])) 
); 

CREATE INDEX ix_field_user_3 
    ON field 
    USING btree 
    (user_id); 
+0

檢查此鏈接:http://stackoverflow.com/questions/13372422/psqlexception-error-null-value-in-column-violates-not-null-constraint –

+0

該鏈接是一個不同的問題 – Brian

+0

我在pgAdmin III中運行了你的語句,並得到'ERROR:語法錯誤在或接近「/」LINE 1:/ d field' – Brian

回答

0

這是有效的。

insert into field (id, name) values (nextval('field_seq'), "Me"); 
4

沒有列默認定義field.id。由於序列​​似乎已經存在(但沒有連接到field.id),你可以解決它:

ALTER SEQUENCE field_seq OWNED BY field.id; 

ALTER TABLE field 
ALTER COLUMN id SET DEFAULT (nextval('field_seq'::regclass)); 

確保序列是不使用別的東西,雖然。

這將是簡單得多創建這樣的表中,以開始:

CREATE TABLE field 
(
    id bigserial PRIMARY KEY, 
    ... 
); 

Details on serial or bigserial in the manual.
不知道該播放框架是如何實現這一點。

+0

我希望找到一種更好的方式來處理這個問題,而不是爲ORM創建的每個表手動更改序列。但如果沒有其他選擇,這將會很好。 – Brian