Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как заставить INSERT не поднимать ошибку при вставке дубликатов. / 4 сообщений из 4, страница 1 из 1
01.12.2005, 22:02
    #33412490
robot648
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить INSERT не поднимать ошибку при вставке дубликатов.
Товарищи специалисты, подскажите, как в постгресе сделать так, чтобы при вставке дублирующих записей ( UNQUE индексов ), он не поднимал ошибку, а просто игнорировал сей факт?

В mysql это делается INSERT IGNORE INTO ..., а как в postgres?
...
Рейтинг: 0 / 0
02.12.2005, 04:03
    #33412633
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить INSERT не поднимать ошибку при вставке дубликатов.
Триггером
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table aaa (id int unique, d text);

CREATE OR REPLACE FUNCTION tf_aaa_ignore_dup_row() RETURNS trigger LANGUAGE plpgsql AS $body$
BEGIN
  if exists(select * from aaa where id=NEW.id) then
    raise NOTICE 'row ignored: aaa.id=%', NEW.id;
    return NULL;
  end if;
  return NEW;
END;
$body$;

CREATE TRIGGER aaa_ignore_dup_row BEFORE INSERT
  ON aaa FOR EACH ROW
  EXECUTE PROCEDURE tf_aaa_ignore_dup_row();
  
insert into aaa select  1 , 'a';
insert into aaa select  2 , 'b';
insert into aaa select  2 , 'bb';
insert into aaa select  2 , 'bbb';
select * from aaa;
...
Рейтинг: 0 / 0
02.12.2005, 11:39
    #33413182
robot648
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить INSERT не поднимать ошибку при вставке дубликатов.
Благодарю. А по-простому никак? Хотя бы просто перехватить эксепшн поднимаемый постгресом и отправить его в dev/null можно? А то это на каждую вставку один селект.
...
Рейтинг: 0 / 0
02.12.2005, 21:17
    #33414882
Opilki_Inside
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить INSERT не поднимать ошибку при вставке дубликатов.
robot648Благодарю. А по-простому никак? Хотя бы просто перехватить эксепшн поднимаемый постгресом и отправить его в dev/null можно? А то это на каждую вставку один селект.

Так ты можешь перехватить эксепшен

[ DECLARE
declarations ]
BEGIN
statements
EXCEPTION
WHEN condition [ OR condition ... ] THEN
handler_statements
[ WHEN condition [ OR condition ... ] THEN
handler_statements
... ]
END;


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


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