0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: postgresql, базы данных, удаление дубликатов, таблицы, postgres, постгресс, полезные команды</p>
1
<p>Теги: postgresql, базы данных, удаление дубликатов, таблицы, postgres, постгресс, полезные команды</p>
2
<p>Если получилось, что в таблице отсутствует первичный ключ (primary key), скорее всего, среди записей есть дубликаты. Речь идёт о дублирующихся строках или случаях, когда дублируется одна либо более колонок. Посмотрим на таблицу с информацией о покупателях, где вторая по счёту строка полностью задублирована:</p>
2
<p>Если получилось, что в таблице отсутствует первичный ключ (primary key), скорее всего, среди записей есть дубликаты. Речь идёт о дублирующихся строках или случаях, когда дублируется одна либо более колонок. Посмотрим на таблицу с информацией о покупателях, где вторая по счёту строка полностью задублирована:</p>
3
<p>Чтобы удалить все дубликаты, нам подойдёт следующий запрос:</p>
3
<p>Чтобы удалить все дубликаты, нам подойдёт следующий запрос:</p>
4
DELETE FROM customers WHERE ctid NOT IN (SELECT max(ctid) FROM customers GROUP BY customers.*);<p>По умолчанию, уникальное для каждой записи поле<strong>ctid</strong>скрыто, однако оно существует в каждой таблице.</p>
4
DELETE FROM customers WHERE ctid NOT IN (SELECT max(ctid) FROM customers GROUP BY customers.*);<p>По умолчанию, уникальное для каждой записи поле<strong>ctid</strong>скрыто, однако оно существует в каждой таблице.</p>
5
<p>Тут следует заметить, что запрос довольно требователен к ресурсам, что следует учитывать при его использовании на рабочем проекте - просто будьте аккуратны.</p>
5
<p>Тут следует заметить, что запрос довольно требователен к ресурсам, что следует учитывать при его использовании на рабочем проекте - просто будьте аккуратны.</p>
6
<p>В следующей ситуации повторяются значения полей.</p>
6
<p>В следующей ситуации повторяются значения полей.</p>
7
<p>Если допускается удалять дубликаты, не сохраняя все данные, используем следующий запрос:</p>
7
<p>Если допускается удалять дубликаты, не сохраняя все данные, используем следующий запрос:</p>
8
DELETE FROM customers WHERE ctid NOT IN (SELECT max(ctid) FROM customers GROUP BY customer_id);<p>Если же информация важна, сначала давайте найдём записи с дубликатами:</p>
8
DELETE FROM customers WHERE ctid NOT IN (SELECT max(ctid) FROM customers GROUP BY customer_id);<p>Если же информация важна, сначала давайте найдём записи с дубликатами:</p>
9
SELECT * FROM customers WHERE ctid NOT IN (SELECT max(ctid) FROM customers GROUP BY customer_id);<p>До удаления такой записи мы можем перенести её во временную таблицу либо заменить значение customer_id на другое.</p>
9
SELECT * FROM customers WHERE ctid NOT IN (SELECT max(ctid) FROM customers GROUP BY customer_id);<p>До удаления такой записи мы можем перенести её во временную таблицу либо заменить значение customer_id на другое.</p>
10
<p>Как бы там ни было, общая форма запроса на удаление вышеописанных записей будет выглядеть так:</p>
10
<p>Как бы там ни было, общая форма запроса на удаление вышеописанных записей будет выглядеть так:</p>
11
DELETE FROM table_name WHERE ctid NOT IN (SELECT max(ctid) FROM table_name GROUP BY column1, [column 2,] );<p>Возможно, вам также будут интересны следующие статьи: - "<a>Работа с конфигурацией в PostgreSQL</a>"; - "<a>Безопасное изменение типа поля в PostgreSQL</a>"; - "<a>Полезные команды в PostgreSQL</a>"; - "<a>Поиск "потерянных" значений в PostgreSQL</a>".</p>
11
DELETE FROM table_name WHERE ctid NOT IN (SELECT max(ctid) FROM table_name GROUP BY column1, [column 2,] );<p>Возможно, вам также будут интересны следующие статьи: - "<a>Работа с конфигурацией в PostgreSQL</a>"; - "<a>Безопасное изменение типа поля в PostgreSQL</a>"; - "<a>Полезные команды в PostgreSQL</a>"; - "<a>Поиск "потерянных" значений в PostgreSQL</a>".</p>
12
<p><em>По материалам "<a>15 Advanced PostgreSQL Commands with Examples</a>" и "<a>10 Most Useful PostgreSQL Commands with Examples</a>".</em></p>
12
<p><em>По материалам "<a>15 Advanced PostgreSQL Commands with Examples</a>" и "<a>10 Most Useful PostgreSQL Commands with Examples</a>".</em></p>
13
13