Sql

Postgresql truncate: PostgreSQL: Documentation: 15: TRUNCATE

postgresql — Освобождение дискового пространства с помощью DELETE или TRUNCATE?

спросил

Изменено 5 лет, 2 месяца назад

Просмотрено 13 тысяч раз

Более недели назад я удалил все строки в таблице postgresql (не через truncate , вместо этого с удалить из ... ). Select count (*) показывает, что строки таблицы теперь равны 0.

Теперь, когда я запускаю запросы для запроса дискового пространства, я все еще вижу, что таблица занимает место. В частности, все индексы все еще существуют и занимают место. Как избавиться от них и освободить место на диске? Во-вторых, почему они остаются на первом месте, когда я избавился от всех строк?


Вот подробное описание таблицы на всякий случай:

 Таблица "public.
links_photoobjectsubscription" Колонка | Тип | Модификаторы --+----------------------------+------ -------------------------------------------------- -------------------- идентификатор | целое число | не нуль по умолчанию nextval('links_photoobjectsubscription_id_seq'::regclass) viewer_id | целое число | не ноль updated_at | временная метка с часовым поясом | не ноль видел | логический | не ноль тип_объекта | переменный характер(15) | не ноль which_photo_id | целое число | which_link_id | целое число | ид_группы_которой | целое число | which_salat_id | целое число | Индексы: "links_photoobjectsubscription_pkey" ПЕРВИЧНЫЙ КЛЮЧ, btree (id) "links_photoobjectsubscription_seen" btree (просмотрено) "links_photoobjectsubscription_updated_at" btree (updated_at) "links_photoobjectsubscription_viewer_id" btree (viewer_id) "links_photoobjectsubscription_what_photo_id" btree (what_photo_id) Ограничения внешнего ключа: "links_photoobjectsubscription_viewer_id_fkey" ВНЕШНИЙ КЛЮЧ (viewer_id) ССЫЛКИ auth_user(id) DEFERRABLE ПЕРВОНАЧАЛЬНО ОТЛОЖЕН "links_photoobjectsubscription_what_photo_id_fkey" ВНЕШНИЙ КЛЮЧ (what_photo_id) ССЫЛКИ links_photo(id) ОТЛОЖЕН ИЗНАЧАЛЬНО ОТЛОЖЕН "what_group_id_photoobjectsubscription" ВНЕШНИЙ КЛЮЧ (what_group_id) ССЫЛКИ links_group(id) НА УДАЛЕНИЕ КАСКАДА "what_link_id_photoobjectsubscription" ВНЕШНИЙ КЛЮЧ (what_link_id) ССЫЛКИ links_link(id) НА УДАЛЕНИЕ КАСКАДА "what_salat_id_photoobjectsubscription" ВНЕШНИЙ КЛЮЧ (what_salat_id) ССЫЛКИ links_salatinvite(id) НА КАСКАД УДАЛЕНИЯ
  • postgresql
  • удалить
  • усечь

Из документации по ВАКУУМ

Существует два варианта ВАКУУМНОЙ РАБОТЫ: стандартная ВАКУУМНАЯ и ВАКУУМНАЯ ПОЛНАЯ. VACUUM FULL может освободить больше места на диске, но работает гораздо медленнее. Кроме того, стандартная форма VACUUM может выполняться параллельно с операциями производственной базы данных. (Такие команды, как SELECT, INSERT, UPDATE и DELETE, продолжат нормально работать, хотя вы не сможете изменить определение таблицы с помощью таких команд, как ALTER TABLE, во время ее очистки.) VACUUM FULL требует монопольной блокировки таблица, над которой он работает, и поэтому не может выполняться параллельно с другим использованием таблицы. Поэтому обычно администраторы должны стремиться использовать стандартный режим VACUUM и избегать VACUUM FULL.

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

Совет. Обычная VACUUM может оказаться неудовлетворительной, если таблица содержит большое количество мертвых версий строк в результате массовых действий по обновлению или удалению. Если у вас есть такая таблица и вам нужно освободить лишнее место на диске, которое она занимает, вам нужно будет использовать VACUUM FULL или альтернативно CLUSTER или один из вариантов перезаписи таблицы ALTER TABLE.

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

В том же документе

Совет. Если у вас есть таблица, все содержимое которой периодически удаляется, попробуйте сделать это с помощью TRUNCATE, а не с помощью DELETE, за которым следует VACUUM. TRUNCATE немедленно удаляет все содержимое таблицы, не требуя последующей операции VACUUM или VACUUM FULL для освобождения неиспользуемого дискового пространства. Недостатком является нарушение строгой семантики MVCC.

И, из документации по TRUNCATE

TRUNCATE быстро удаляет все строки из набора таблиц. Он имеет тот же эффект, что и неквалифицированный DELETE для каждой таблицы, но поскольку он фактически не сканирует таблицы, он работает быстрее. Кроме того, он немедленно освобождает место на диске, не требуя последующей операции VACUUM. Это наиболее полезно для больших таблиц.

4

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

Как использовать команду Truncate Table в PostgreSQL

PostgreSQL предлагает несколько способов усечения конкретной таблицы. Команда

TRUNCATE TABLE — один из наиболее часто используемых способов усечения таблицы. ТАБЛИЦА TRUNCATE 9Команду 0098 можно выполнить как из SQL SHELL, так и из pg Admin.

Эта запись иллюстрирует использование команды TRUNCATE TABLE с помощью различных примеров. Итак, начнем!

Как обрезать таблицу в PostgreSQL?

Основной синтаксис команды TRUNCATE TABLE будет следующим:

 TRUNCATE TABLE имя_вкладки; 

Здесь tab_name — это таблица, которую нужно усечь.

Параметры команды TRUNCATE TABLE

Команда «TRUNCATE TABLE» может принимать один из следующих параметров:

CONTINUE IDENTITY t изменить или перезапустить стоимость заказов.

RESTART IDENTITY: Сбрасывает столбец идентификаторов.

КАСКАД: Усекает все таблицы, включая те таблицы, которые имеют ссылки внешнего ключа на другие таблицы.

ОГРАНИЧЕНИЕ: Это параметр по умолчанию в TRUNCATE TABLE , который используется для отклонения усечения, если какие-либо другие таблицы имеют ссылки на таблицы по внешнему ключу.

Как использовать оператор TRUNCATE TABLE из psql?

Откройте SQL SHELL и выполните следующие шаги, чтобы усечь таблицу из выбранной базы данных.

Шаг 1. Установите соединение с базой данных

Выберите базу данных и установите соединение с выбранной таблицей с помощью Команда «\c»

:

Шаг 2: Выберите таблицу

Запустите команду «\dt» , чтобы просмотреть список таблиц:

Выберите таблицу, которую вы хотите усечь. Допустим, нам нужно обрезать таблицу staff_details.

Шаг 3. Усечение таблицы с помощью команды TRUNCATE TABLE

Запустите команду «TRUNCATE TABLE» , как показано в следующем фрагменте кода, чтобы обрезать выбранную таблицу:

 TRUNCATE TABLE staff_details; 

Приведенный выше фрагмент показывает, что команда TRUNCATE TABLE выполняется успешно.

Как обрезать таблицу с помощью графического интерфейса?

Выполните следующие шаги правильно, чтобы ОБРЕЗАТЬ

таблицу с помощью pgAdmin :

Шаг 1: Выберите базу данных

Во-первых, откройте дерево pgAdmin 9000 9005 и выберите нужный объект базы данных. Мы выбрали базу данных «пример» .

Шаг 2: Выберите таблицу

В выбранной базе данных найдите общедоступный раздел в разделах схем и выберите таблицу, которую вы хотите обрезать:

Предположим, мы хотим обрезать » author_details» таблица.

Шаг 3: Сократите требуемую таблицу

Щелкните правой кнопкой мыши выбранную таблицу и выберите параметр «Усечение» , чтобы обрезать/удалить нужную таблицу:

Шаг 4: Подтверждение усечения таблицы

При выборе параметра Truncate откроется окно подтверждения. Нажмите кнопку «Да» , чтобы обрезать выбранную таблицу:

При нажатии кнопки «Да» в правом нижнем углу экрана вашего компьютера появится подтверждающее сообщение:

Вышеприведенный фрагмент кода подтверждает, что выбранная таблица была успешно усечена.

Как выполнить команду TRUNCATE TABLE из pgAdmin?

Щелкните правой кнопкой мыши раздел таблиц и выберите параметр «Инструмент запросов»:

При нажатии на параметр «Инструмент запросов» откроется следующее окно:

Введите приведенную ниже команду, чтобы обрезать таблицу author_details:

 TRUNCATE ТАБЛИЦА author_details; 

Вывод поясняет, что выбранная таблица была успешно усечена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *