Re: constrain with MATCH full and NULL values in referenced table

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: constrain with MATCH full and NULL values in referenced table
Дата
Msg-id 708fdc69-c14d-8829-fb9c-ee4862712eaf@aklaver.com
обсуждение исходный текст
Ответ на constrain with MATCH full and NULL values in referenced table  (stan <stanb@panix.com>)
Список pgsql-general
On 8/12/19 8:51 AM, stan wrote:
Please reply to list also.
Ccing list.

> On Mon, Aug 12, 2019 at 08:17:33AM -0700, Adrian Klaver wrote:
>> On 8/12/19 8:11 AM, stan wrote:
>>> I am creating a table that has 2 values in it which are keys pointing to 2
>>> other tables. I need for the UNIQUE combination of these 2 keys to exist in
>>> a fourth table. It has been recommended to use a foreign key constraint with
>>> the MATCH FULL parameter.
>>
>> Without the table schema it difficult for me to figure out what it is you
>> are attempting.
>>
>> See below for how MATCH FULL works:
>>
>> https://www.postgresql.org/docs/11/sql-createtable.html
>>
>  From that page:
> 
> MATCH FULL will not allow one column of a multicolumn foreign key to be null
> unless all foreign key columns are null; if they are all null, the row is
> not required to have a match in the referenced table.
> 
> I think that means that what I am trying to enforce will not work.
> 
> The table the insert is on has 2 columns, each of these is a foreign key to
> other table. I need the unique combination of these 2 keys to exist in a 3rd
> table that is a rate table. It has 3 columns, key 1, key 2, and rate. Looks
> like to me, if neither of the 2 keys are in the rate table the constraint
> will allow the insert. Do I have this wrong?

The docs are referring to a multicolumn FK so something like:

create table parent_tbl(fld_1 integer, fld_2 integer, UNIQUE(fld_1, fld_2));

create table child_tbl(fk_fld_1 integer, fk_fld_2 integer, FOREIGN KEY 
(fk_fld_1, fk_fld_2) REFERENCES parent_tbl(fld_1, fld_2));

\d child_tbl
               Table "public.child_tbl"
   Column  |  Type   | Collation | Nullable | Default
----------+---------+-----------+----------+---------
  fk_fld_1 | integer |           |          |
  fk_fld_2 | integer |           |          |
Foreign-key constraints:
     "child_tbl_fk_fld_1_fkey" FOREIGN KEY (fk_fld_1, fk_fld_2) 
REFERENCES parent_tbl(fld_1, fld_2)

Not sure what your setup is. That is why it is important to show the 
actual schema.



> 
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: constrain with MATCH full and NULL values in referenced table
Следующее
От: Francisco Olarte
Дата:
Сообщение: Re: constrain with MATCH full and NULL values in referenced table