Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как игнорировать дубликаты? / 8 сообщений из 8, страница 1 из 1
20.02.2007, 11:21
    #34343195
Tertium Organum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
Портирую щас с платного (ох уж этот мелкосовт) MSSQL на бесплатный мать его Postgres. Среди всего прочего так и не нашел ответ на вопрос: как игнорировать дубликаты при мегавставках с помощью COPY. В MSSQL я создавал ключ в таблице с флагом IGNORE_DUP_KEY, а потом спокойно делал INSERT или BULK INSERT и все тихо.
просто сами понимаете проверять каждую запись, да и вообще втыкать инсертом, если их миллион, это сумасойти.
Кто подскажет: как это разрулить под постгрой?
...
Рейтинг: 0 / 0
20.02.2007, 11:34
    #34343232
.gc
.gc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
А если тупо сначала выполнять copy в temp_copy_table и далее:
delete from temp_copy_table using real_table where temp_copy_table.key = real_table.key;
insert into real_table select * from temp_copy_table;
???
...
Рейтинг: 0 / 0
20.02.2007, 11:54
    #34343325
Tertium Organum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
ну вроде решение, спасибо,
но решения по синтаксису не существует, как у MS?
а то на всякий случай не хоца со временными таблицами вязаться
да и потом, в тех местах, где по одной записи втыкается, надо проверку делать if not exists select ... insert ..., то есть надо править кучу сёвого кода..
...
Рейтинг: 0 / 0
20.02.2007, 12:04
    #34343381
.gc
.gc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
Ну на одиночные вставки можно написать rule
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table foo_test (
  id int primary key,
  data text
);
create rule foo_test_ignore as on insert to foo_test 
        where exists (select id from foo_test where foo_test.id = new.id) 
        do instead nothing;

insert into foo_test values ( 1 , 'text 1');
insert into foo_test values ( 2 , 'text 2');
insert into foo_test values ( 3 , 'text 3');
insert into foo_test values ( 1 , 'text 4');
insert into foo_test values ( 2 , 'text 4');
select * from foo_test;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
INSERT  0   1 
INSERT  0   1 
INSERT  0   1 
INSERT  0   0 
INSERT  0   0 
 id |  data  
----+--------
   1  | text  1 
   2  | text  2 
   3  | text  3 
но как оно будет работать при больших объемах - хз.
...
Рейтинг: 0 / 0
20.02.2007, 12:30
    #34343477
Tertium Organum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
спасибо! буду разбираться
...
Рейтинг: 0 / 0
22.02.2007, 01:39
    #34348720
DeWiL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
на сколько я помню, у команды COPY есть ограничения, что она игнорирует RULE.
я на это уже наступал, и обсуждали это в форуме
...
Рейтинг: 0 / 0
22.02.2007, 12:52
    #34349888
Tertium Organum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
дак я вот пришел к чему - создаем таблицу такую же как целевая, но без констрайнтов, тригеров, рулов и пр., потом делаем:
Код: plaintext
1.
2.
3.
copy tmp_mytable from <filename>;
insert into mytable select * from tmp_mytable;
drop tmp_table;
в две ступени, но в таком случае рулы учитываются
...
Рейтинг: 0 / 0
22.02.2007, 15:54
    #34350665
DeWiL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как игнорировать дубликаты?
Tertium Organumдак я вот пришел к чему - создаем таблицу такую же как целевая, но без констрайнтов, тригеров, рулов и пр., потом делаем:
...
в две ступени, но в таком случае рулы учитываются

так можно.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как игнорировать дубликаты? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]