Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как удалить дубли абсолютно одинаковых строк? / 25 сообщений из 29, страница 1 из 2
24.05.2017, 16:09
    #39459003
ЖEHbKA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
Привет, есть таблица.

Например у нее одно поле, id.


И в нем есть дубли.

1
2
3
3
4
5
6
7
7
8
9
10
...

Ну вы поняли.


Как удалить по одному дублю?
...
Рейтинг: 0 / 0
24.05.2017, 16:12
    #39459007
ЖEHbKA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
id повторяется и удалятся будет по 2 строки....
...
Рейтинг: 0 / 0
24.05.2017, 16:25
    #39459017
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKA,

Это традиционная задача на собеседовании программиста БД.
Ее нужно решить как минимум двумя способами.

Сделайте выводы о своей профпригодности.
...
Рейтинг: 0 / 0
24.05.2017, 16:32
    #39459021
ЖEHbKA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
чсв чсв чсв
...
Рейтинг: 0 / 0
24.05.2017, 18:41
    #39459122
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKA,

в пж есть служебные поля:
https://postgrespro.ru/docs/postgresql/9.5/ddl-system-columns

если бы их не было -- можно добавить ещё одно поле, и заполнить его (например в for loop-е) возрастающими значениями
...
Рейтинг: 0 / 0
24.05.2017, 18:53
    #39459128
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKA, надеюсь, это не задачка на вакансию?
(беги с этого собеседования.)
Нормальный работодатель даёт задачи, приблизительно связанные с деятельностью фирмЫ.
Тут или он не знает чего хочет(а всех собак на тебя),
или у них серьёзные проблемы с архитектурой.
ЗЫ
А вообще, такие задачки надо делать самому.
Минимум, двумя способами можно.
...
Рейтинг: 0 / 0
24.05.2017, 18:56
    #39459129
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
qwwqЖEHbKA,

в пж есть служебные поля:
https://postgrespro.ru/docs/postgresql/9.5/ddl-system-columns

если бы их не было -- можно добавить ещё одно поле, и заполнить его (например в for loop-е) возрастающими значениями
Луп тут нафиг не упал, но можно и лупом.
Короче, считаем ещё 2 способа.
Итого 4 минимум))))
...
Рейтинг: 0 / 0
24.05.2017, 19:11
    #39459135
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ОКТОГЕН...
Нормальный работодатель даёт задачи, приблизительно связанные с деятельностью фирмЫ
...

Вполне обычная жизненная задача.
Чаще всего - отработка ошибок оператора, обмена данными и т.п.

Например: Оператор загрузил тарифы по некоторым регионам дважды. Они различаются примерно на пол-часа только по времени загрузки. Никакой ошибки нет. Но мусор все же лучше вычистить.
...
Рейтинг: 0 / 0
24.05.2017, 19:17
    #39459138
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ОКТОГЕН...
Итого 4 минимум))))

Не-не-не! Давайте считать только чистый SQL без привлечения процедур.

Можно еще спросить: метод в рамках стандарта SQL или применяет специфические для PostgreSQL методы.
...
Рейтинг: 0 / 0
24.05.2017, 20:07
    #39459152
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ОКТОГЕНqwwq<> добавить ещё одно поле, и заполнить его (например в for loop-е) возрастающими значениями
Луп тут нафиг не упал<>
зачем отвлекаться на особенности добавления поля с дефолтным сиквенсом в определении.

но настоясчему поцгрессисту таки равнение на ctid[,+tableoid] ближе.
...
Рейтинг: 0 / 0
24.05.2017, 20:24
    #39459158
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ursidoОКТОГЕН...
Нормальный работодатель даёт задачи, приблизительно связанные с деятельностью фирмЫ
...

Вполне обычная жизненная задача.
Чаще всего - отработка ошибок оператора, обмена данными и т.п.

Например: Оператор загрузил тарифы по некоторым регионам дважды. Они различаются примерно на пол-часа только по времени загрузки. Никакой ошибки нет. Но мусор все же лучше вычистить.неа, тут есть отличие по времени загрузки. задача уже не о полностью идентичных рекордах.

обычна она только у тех, у кого архитектура набекрень, и кто об уникъю не слышал. (более широко -- и об екслюдах тоже )

в случае вашего ойператора нужен уникью на регион и дату тарифа, и определиться с политикой разрешения коллизии -- перекрывать или откатывать, или же дать кноббку выбора дурню в руки (или же по выбору на каждую строку заливки, пока не надоест крыжики открыживать), воплотив оное в проце,дуре(ах) заливки. всё. и никаких sql--пассов руками на.
...
Рейтинг: 0 / 0
25.05.2017, 10:25
    #39459387
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
qwwq...
в случае вашего ойператора нужен уникью на регион и дату тарифа, и определиться с политикой разрешения коллизии ...

Со стороны владельца системы все видится иначе:

Разовые ручные действия по устранению редких ошибок (хотя это не ошибка) обходятся ему гораздо дешевле напряженной работы всей толпы IT-отдела по обработке всех вариантов.

Владелец системы прав: это его деньги, его система, именно он формулирует проблему.

"Кривая архитектура" - слишком сильное утверждение. Потому что даже кривая архитектура приложения позволяет владельцу генерировать прибыль и оплачивать все капризы разработчиков и ее дальнейшее улучшение.

Поэтому первый вопрос на собеседовании кандидата:

-- Пожалуйста, напишите (ручкой на бумажке) запрос удаления дубликатов из таблицы представленной структуры. А теперь напишите другим способом.

Следующий вопрос:
-- Выберите все строки из мастер-таблицы, для которых отсутствуют данные в деталь-таблице. Опять же ручной на бумажке. И еще вторым способом.

Обычно у адекватного кандидата эти вопросы занимают не более 20 минут и одного листа А4. Из них 5 минут - подавление удивления от странного устройства: ручка и бумага. Многие забыли когда пользовались последний раз.
...
Рейтинг: 0 / 0
25.05.2017, 13:06
    #39459575
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ursidoРазовые ручные действия по устранению редких ошибок (хотя это не ошибка) обходятся ему гораздо дешевле напряженной работы всей толпы IT-отдела по обработке всех вариантов.


https://www.anekdot.ru/id/334092/

или "бешенной собаке семь верст не крюк"

само существование развесистого айти отдела (с девелоперами, а не токмо одминами ) у пользователя (а не разработчика) -- свидетельство низкой готовности (плохого качества) используемых решений.

но это другая сторона медали -- решение можно продать один раз. а исправление ошибок , сиречь "поддержку" -- продают бесконечно. особо хорошо это известно франчам 1С (устранение багов в обновлениях и сшивка обновлений с наколенными кривыми поделиями франчей -- вечный хлебушек).

так же и ойти отдел у потребителя существует (в количествах) до тех пор, пока есть ещё много мест, где многими (хотя бы 2--мя) способами собачка (ойтишнег) может полизать свои ядрышки.

правильная архитектура экономит усилия, а не наоборот. это как вопрос, как дешевле строить мост -- вдоль реки, или всё ж таки поперёк.

...
Рейтинг: 0 / 0
25.05.2017, 13:27
    #39459599
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
qwwq,

Если про сферического коня в вакууме - то все верно.
Но есть разница между "теоретически" и "практически" (опять же два варианта анекдота по этому поводу).

Главный вопрос: "хорошая архитектура" -- это навсегда или на какой-то срок. Как осуществляется переход от одной "хорошей архитектуры" к другой "очень хорошей архитектуре". Что делают в пути.

Что лучше: идеальный продукт когда-то потом или удовлетворительный с известными ошибками но сейчас.
...
Рейтинг: 0 / 0
25.05.2017, 13:46
    #39459625
ЖEHbKA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
Ребята, это было чисто практическое задание.
...
Рейтинг: 0 / 0
25.05.2017, 13:49
    #39459629
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKA,

Да. И Вы с ним не справились.

Ваше мнение очен важно для нас. Оставьте свой номер телефона. Мы Вам обязательно перезвоним.
...
Рейтинг: 0 / 0
25.05.2017, 14:21
    #39459669
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ursidoqwwq,
***
Что лучше: идеальный продукт когда-то потом или удовлетворительный с известными ошибками но сейчас.
"Лучшее - враг хорошего".
Хотя, всё дело в цене ошибок.
Переделывать гораздо дороже, чем лишний раз хорошенько всё продумать.
...
Рейтинг: 0 / 0
25.05.2017, 14:44
    #39459706
ЖEHbKA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ursidoДа. И Вы с ним не справились.


Еще на момент написания первого поста в этой теме уже адалил дубли по ctid, однако пришлось блок DO писать чтобы не по одному удалять.

Меня интересовало изящное решение по удалению сразу всех дублей по всей таблице без использования PSQL, только средствами SQL.

Пока еще актуально.
...
Рейтинг: 0 / 0
25.05.2017, 14:53
    #39459722
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKAЕще на момент написания первого поста в этой теме уже адалил дубли по ctid, однако пришлось блок DO писать чтобы не по одному удалять.

Меня интересовало изящное решение по удалению сразу всех дублей по всей таблице без использования PSQL, только средствами SQL.

Пока еще актуально.
А почему бы не запилить транзакцию, в которой создать такую таблицу,
и не поэкспериментировать с SQL?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
-- ROLLBACK;
BEGIN;
CREATE TEMPORARY TABLE my_tbl(id BIGINT);
INSERT INTO my_tbl(id)
SELECT generate_series(1,1000);
INSERT INTO my_tbl(id)
SELECT generate_series(1,100);
INSERT INTO my_tbl(id)
SELECT generate_series(1,100);
INSERT INTO my_tbl(id)
SELECT generate_series(1,10);

-- тут всякие эксперименты

-- а тут проверка, что всё ok
SELECT id FROM my_tbl ORDER BY id ASC;
...
Рейтинг: 0 / 0
25.05.2017, 14:54
    #39459724
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKA,

БЛДЖАД!
Прямой поиск в любимой поисковой системе выдал туеву хучу ссылок с готовыми расписанными решениями.
Из первых пяти ссылок две были на sql.ru.
...
Рейтинг: 0 / 0
25.05.2017, 15:27
    #39459764
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKAursidoДа. И Вы с ним не справились.


Еще на момент написания первого поста в этой теме уже адалил дубли по ctid, однако пришлось блок DO писать чтобы не по одному удалять.

Меня интересовало изящное решение по удалению сразу всех дублей по всей таблице без использования PSQL, только средствами SQL.

Пока еще актуально.кхм.

бедность воображения и незнание скл можно компенсировать трудом и перебором вариантов. как вам тут уже верно предложили.

рано или поздно станет например ясно, чтаааа
достаточно сказать что нить типа
Код: plaintext
1.
2.
delete ... 
where [not] exists(SELEct ... ) 
с использованием ctid-ов -- и фсё

если же не бояццо потереть (внутри транзы) всё (нет рилейшенов) -- то просто перезалейте табличку дистинктным набором её же записей. -- накладные -- лишние версии, что плохо в пж ,но не настолько, если табла невелика.
...
Рейтинг: 0 / 0
25.05.2017, 15:32
    #39459770
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ОКТОГЕНursidoqwwq,
***
Что лучше: идеальный продукт когда-то потом или удовлетворительный с известными ошибками но сейчас.
"Лучшее - враг хорошего".
Хотя, всё дело в цене ошибок.
Переделывать гораздо дороже, чем лишний раз хорошенько всё продумать.пока проблема неосознанна -- можно и лепить горбатого. но упоротствовать в леплениии горбатого (отказываться от уникью), когда решение (уникью или ексклюд по ренджам) уже очевидно -- это что-то религиозное.

за такое надо сжигать на кострах или хотя бы душить окладами. каламбур
...
Рейтинг: 0 / 0
25.05.2017, 15:38
    #39459779
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
qwwq... когда решение (уникью или ексклюд по ренджам) уже очевидно...

Именно этот момент и нужно обосновать тому кто предлагает решение.

Уникальным оно было вчера и где-то там. Здесь и сейчас ситуация может быть другой.
...
Рейтинг: 0 / 0
25.05.2017, 15:44
    #39459789
ЖEHbKA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
qwwqдостаточно сказать что нить типа
Код: plaintext
1.
2.
delete ... 
where [not] exists(SELEct ... ) 
с использованием ctid-ов -- и фсё

то что внутри не так-то просто сделать как кажется :)

чтобы не по одному дублю удалять а все сразу.
...
Рейтинг: 0 / 0
25.05.2017, 16:15
    #39459815
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить дубли абсолютно одинаковых строк?
ЖEHbKA,

Видимо, это слишком сложно для Вас. Займитесь сельским хозяйством.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как удалить дубли абсолютно одинаковых строк? / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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