2015-11-06 120 views
0

我無法從PostGres DB的父表中刪除記錄..你們中的任何一個人都可以讓我對此有所瞭解。級聯刪除不起作用

-- Table: tbl_patient 

-- DROP TABLE tbl_patient; 

CREATE TABLE tbl_patient 
(
patient_id bigserial NOT NULL, 
date_of_birth date NOT NULL, 
fathers_name character varying(255) NOT NULL, 
first_name character varying(255) NOT NULL, 
last_name character varying(255), 
marital_status character varying(255), 
mobile_number character varying(255) NOT NULL, 
occupation character varying(255), 
phone_number character varying(255), 
pregnancy_status character varying(255), 
sex character varying(255) NOT NULL, 
CONSTRAINT tbl_patient_pkey PRIMARY KEY (patient_id) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE tbl_patient 
OWNER TO postgres; 


-- Table: tbl_address 

CREATE TABLE tbl_address 
(
address_id bigserial NOT NULL, 
address_line_1 character varying(255) NOT NULL, 
address_line_2 character varying(255), 
city character varying(255), 
country character varying(255), 
district character varying(255) NOT NULL, 
pincode character varying(255) NOT NULL, 
state character varying(255), 
street character varying(255), 
patient_id bigint, 
CONSTRAINT tbl_address_pkey PRIMARY KEY (address_id), 
CONSTRAINT fk_slc6pgeimmox5buka8bydy6c4 FOREIGN KEY (patient_id) 
    REFERENCES tbl_patient (patient_id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE tbl_address 
    OWNER TO postgres; 

// ----------------------------------------- --------------------------

當我把這個命令

DELETE FROM tbl_patient 
    WHERE patient_id = 1; 

我下面

此錯誤

ERROR: update or delete on table "tbl_patient" violates foreign key constraint "fk_slc6pgeimmox5buka8bydy6c4" on table "tbl_address" SQL state: 23503 Detail: Key (patient_id)=(1) is still referenced from table "tbl_address".

+0

您的代碼沒有問題。它工作得很好。即使在'tbl_patient'表中添加了一行之後,它也會被刪除。在其他地方尋找問題。如果可能的話,創建一個新的數據庫並在那裏嘗試。你會看到它的作品。 – mehmet

+1

你在哪裏「放這個命令」?以及它與JPA API有什麼關係? –

回答

1

你寫DELETE NO ACTION,你想要的行動:)只需要更改爲

REFERENCES tbl_patient (patient_id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE CASCADE 

NO ACTION表示服務器如果存在引用的行,則不會執行任何操作。由於它們存在,並且您還指定MATCH SIMPLE爲單列外鍵,因此PostgreSQL無法執行刪除操作,因爲引用了這些行。