barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

вторник, 15 мая 2012 г.

PostgreSQL: удаление строк из таблицы в случае отсутствия первичного ключа и наличия полностью идентичных строк

Задача:

Есть некая таблица, в которой 8 строк, и последние 4 полностью повторяют первые 4. Необходимо удалить строки-дубликаты.

Решение:

Использовать LIMIT в DELETE Postgres не позволяет (хотя вроде бы в какой-то другой СУБД я такую возможность встречал), но можно использовать внутренний идентификатор строк CTID, который позволяет различать 2 идентичные строки. В моем случае следующий запрос удаляет последние 4 строки:
DELETE FROM r_administrative_level WHERE CTID IN('(0,5)','(0,6)','(0,7)','(0,8)')

Комментариев нет:

Отправить комментарий