powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как удалить дубли абсолютно одинаковых строк?
25 сообщений из 29, страница 1 из 2
как удалить дубли абсолютно одинаковых строк?
    #39459003
ЖEHbKA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, есть таблица.

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


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

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

Ну вы поняли.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

Пока еще актуально.
...
Рейтинг: 0 / 0
как удалить дубли абсолютно одинаковых строк?
    #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
как удалить дубли абсолютно одинаковых строк?
    #39459724
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЖEHbKA,

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


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

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

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

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

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

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

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

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

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

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

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

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


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