2015-11-06 3 views
0

Я не могу удалить запись из родительской таблицы PostGres DB .. Любой из вас может получить от меня идею об этом.Cascade Delete не работает

-- 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 не может выполнять удаление из-за этих ссылочных строк.