Re: ADD FOREIGN KEY fails, but the records exist

Поиск
Список
Период
Сортировка
От Ron
Тема Re: ADD FOREIGN KEY fails, but the records exist
Дата
Msg-id d67297d5-a0f2-d876-ec23-5b1c6f418bf8@gmail.com
обсуждение исходный текст
Ответ на Re: ADD FOREIGN KEY fails, but the records exist  (Adrian Klaver <adrian.klaver@aklaver.com>)
Ответы Re: ADD FOREIGN KEY fails, but the records exist  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
On 2/15/21 10:17 AM, Adrian Klaver wrote:
On 2/15/21 8:12 AM, Ron wrote:
Postgresql 12.5

It's a self-referential FK on a single (but partitioned) table.  The ALTER TABLE command fails, but I queried it, and the record that it fails on exists.  I modified the original INITIALLY IMMEDIATE clause to INITIALLY DEFERRED but that did not help.

What am I doing wrong?

(We're migrating from Oracle to PostgreSQL, and this is working in Oracle.)

sides=> ALTER TABLE employer_response
     ADD CONSTRAINT amended_response_fk FOREIGN KEY (amended_response_id, part_date)
         REFERENCES employer_response(employer_response_id, part_date)
     ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED ;
ERROR:  insert or update on table "employer_response_p2021_01" violates foreign key constraint "amended_response_fk"
DETAIL:  Key (amended_response_id, part_date)=(103309154, 2021-01-06 00:00:00) is not present in table "employer_response".
sides=>
sides=> select employer_response_id, part_date
sides-> from strans.employer_response
sides-> where amended_response_id = 103309154;
employer_response_id |      part_date
----------------------+---------------------
             103309156 | 2021-01-06 00:00:00
(1 row)

The error:

DETAIL:  Key (amended_response_id, part_date)=(103309154, 2021-01-06 00:00:00) is not present in table "employer_response"

is pointing at 103309154 for amended_response_id = employer_response_id. You are showing an employer_response_id of 103309156

But my query's WHERE clause specifies "amended_response_id = 103309154;"  (I've highlighted it, if you have a GUI MUA.)




sides=> select employer_response_id, part_date
from strans.employer_response_p2021_01
where amended_response_id = 103309154;
employer_response_id |      part_date
----------------------+---------------------
             103309156 | 2021-01-06 00:00:00
(1 row)





--
Angular momentum makes the world go 'round.

В списке pgsql-general по дате отправления:

Предыдущее
От: "David G. Johnston"
Дата:
Сообщение: Re: prepare in a do loop
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: ADD FOREIGN KEY fails, but the records exist