Re: Copy Bulk Ignore Duplicated

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: Copy Bulk Ignore Duplicated
Дата
Msg-id 3e8bd3be-407f-8bcf-1b53-8dd0726c0116@aklaver.com
обсуждение исходный текст
Ответ на Re: Copy Bulk Ignore Duplicated  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
On 6/17/19 9:22 AM, Adrian Klaver wrote:
> On 6/17/19 9:06 AM, Leandro Guimarães wrote:
> Please reply to list also.
> Ccing list.
>> Ugh My bad again.
>>
>> They are UNIQUE:
>> CONSTRAINT unique_const_value_20190501_45 UNIQUE (customer_id, 
>> date_time, indicator_id, element_id),
>>
>> I've made a mistake typing "check constraint" before because these are 
>> partitioned tables and I have the CHECK CONSTRAINT to partition.
>>
>> Is that clear?
> 
> Yes.
> 
> To get back to the original issue, the problem is that when you COPY in 
> new data you may get rows that conflict on the above UNIQUE constraint, 
> correct?

Assuming the above is correct, would not something like below work?:

create table orig_tbl(id integer, fld_1 varchar, fld_2 integer, fld_3 
varchar, CONSTRAINT u_idx UNIQUE(id, fld_1, fld_2));

\d orig_tbl
                    Table "public.orig_tbl"
  Column |       Type        | Collation | Nullable | Default
--------+-------------------+-----------+----------+---------
  id     | integer           |           |          |
  fld_1  | character varying |           |          |
  fld_2  | integer           |           |          |
  fld_3  | character varying |           |          |
Indexes:
     "u_idx" UNIQUE CONSTRAINT, btree (id, fld_1, fld_2)

create table tmp_tbl(id integer, fld_1 varchar, fld_2 integer, fld_3 
varchar);

insert into orig_tbl values (1, 'test', 3, 'test'), (2, 'foo', 5, 
'bar'), (3, 'cat', 8, 'dog');

select * from orig_tbl ;

  id | fld_1 | fld_2 | fld_3
----+-------+-------+-------
   1 | test  |     3 | test
   2 | foo   |     5 | bar
   3 | cat   |     8 | dog
(3 rows)

insert into tmp_tbl values (1, 'test', 3, 'test'), (4, 'fish', 6, 
'bird'), (7, 'rabbit', 8, 'squirrel'), (10, 'plant', 2, 'animal');

select * from tmp_tbl ;

  id | fld_1  | fld_2 |  fld_3
----+--------+-------+----------
   1 | test   |     3 | test
   4 | fish   |     6 | bird
   7 | rabbit |     8 | squirrel
  10 | plant  |     2 | animal
(4 rows)

select * from tmp_tbl AS tt left join orig_tbl AS ot on (tt.id, 
tt.fld_1, tt.fld_2) = (ot.id, ot.fld_1, ot.fld_2) where ot.id is null;

  id | fld_1  | fld_2 |  fld_3   | id | fld_1 | fld_2 | fld_3
----+--------+-------+----------+----+-------+-------+-------
   4 | fish   |     6 | bird     |    |       |       |
   7 | rabbit |     8 | squirrel |    |       |       |
  10 | plant  |     2 | animal   |    |       |       |

> 
>>
>> Thanks for your patience!
>> Leandro Guimarães
>>
> 
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



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

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: Copy Bulk Ignore Duplicated
Следующее
От: Leandro Guimarães
Дата:
Сообщение: Re: Copy Bulk Ignore Duplicated