Re: ADD FOREIGN KEY fails, but the records exist

From: Ron <ronljohnsonjr(at)gmail(dot)com>
To: "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: ADD FOREIGN KEY fails, but the records exist
Date: 2021-02-15 16:23:29
Message-ID: d67297d5-a0f2-d876-ec23-5b1c6f418bf8@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2021-02-15 16:27:15 Re: ADD FOREIGN KEY fails, but the records exist
Previous Message David G. Johnston 2021-02-15 16:23:26 Re: prepare in a do loop