postgresql — Postgres предлагает «Обрезать таблицу… одновременно»
спросил
Изменено 5 лет, 5 месяцев назад
Просмотрено 16 тысяч раз
При работе:
TRUNCATE TABLE YYYYY RESTART IDENTITY
Я вижу это сообщение об ошибке:
ОШИБКА: невозможно обрезать таблицу, на которую ссылается ограничение внешнего ключа ПОДРОБНОСТИ: Таблица «XXXXX» ссылается на «YYYYY». СОВЕТ: Одновременно обрежьте таблицу «XXXXX» или используйте TRUNCATE... CASCADE.
Из двух предложений в ПОДСКАЗКА
:
Использование
TRUNCATE ... CASCADE
имеет смысл и работает, но менее явно, потому что нужно проверитьYYYYY
, чтобы увидеть, куда идет каскад. Это заставляет меня попробовать другой вариант:Обрезать таблицу "XXXXX" одновременно
, но мой вопрос:Что значит обрезать таблицу
одновременно с
?
Я попытался добавить TRUNCATE XXXXX...
(и обернуть их оба в BEGIN
/ COMMIT
), но это дает ту же ошибку.
- postgresql
- усечение
- каскад
- Что означает одновременное усечение таблицы?
То есть с тем же оператором. Вы можете обрезать несколько таблиц:
TRUNCATE xxxxx, yyyyy RESTART IDENTITY ;
Подробнее в документации Postgres: TRUNCATE
.
1) Каскадные усечения могут быть опасны. Если у вас есть таблица поиска (в данном случае я думаю, что XXXX), попрощайтесь с ней, потому что она будет усечена, и вы потеряете все эти данные.
Например, у вас есть таблица «Клиенты» (ГГГГ) с FK в «Заказы» (XXXX).
Когда вы усекаете YYYY с помощью каскадного усечения, он будет усекать YYYY. Если нет, он отобразит ошибку усечения, которую вы видите.2) Сократить таблицу «XXXX» одновременно означает, что она также предлагает вам усечь вашу таблицу поиска/справок.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
PostgreSQL TRUNCATE TABLE — javatpoint
следующий → ← предыдущая В этом разделе мы собираемся понять работу команды PostgreSQL TRUNCATE TABLE для быстрого удаления всех записей из огромных таблиц. Чтобы удалить все данные из таблицы, мы используем команду DELETE. Когда таблица содержит много записей и также бесполезна, в этом случае мы будем использовать TRUNCATE TABLE Команда для удаления всех записей из определенной таблицы. Синтаксис команды усечения Базовый синтаксис команды TRUNCATE TABLE следующий: TRUNCATE TABLE имя_таблицы; [ ПЕРЕЗАПУСТИТЬ ИДЕНТИФИКАЦИЮ | ПРОДОЛЖИТЬ ИДЕНТИЧНОСТЬ ] [ КАСКАД | ОГРАНИЧИВАТЬ ] В приведенном выше синтаксисе у нас есть следующие параметры:
Примечание. Команда TRUNCATE TABLE удаляет все записи из таблицы без проверки, и это быстрее, чем команда DELETE.В PostgreSQL мы можем выполнить усечение таблицы двумя способами:
Усечение таблицы PostgreSQL с помощью pgAdminЧтобы удалить таблицу с помощью команды truncate table в pgAdmin , мы выполним следующие шаги: Этап 1 Откройте свой pgAdmin , а затем перейдите в дерево объектов , где мы перейдем к базе данных, перейдите в общедоступный раздел под схемами и выберите конкретную таблицу (student_info) , которую мы хотим обрезать . База данных → javatpoint → Схема → общедоступная → таблица → student_info Этап 2 Затем мы щелкнем правой кнопкой мыши выбранную таблицу (student_info) и выберем опцию Truncate, а затем снова выберем опцию Truncate из данного раскрывающегося списка, как мы видим на снимке экрана ниже: Этап 3 Таблица усечения 9На экране появится всплывающее окно 0113, где мы нажмем кнопку OK , чтобы обрезать таблицу student_info . Этап 4 Как только мы нажмем кнопку OK , таблица будет удалена автоматически, как мы видим на снимке экрана ниже, что в разделе Усечение таблицы PostgreSQL с помощью SQL Shell (PSQL)Чтобы удалить таблицу с помощью команды truncate table в psql , мы выполним следующие шаги: Этап 1 Откройте оболочку SQL (psql) , которая появилась с необходимыми реквизитами . После этого мы войдем на сервер базы данных Postgres, используя пароль , который мы создали в процессе установки PostgreSQL. И мы подключены к серверу Postgres , как мы видим на скриншоте ниже: Этап 2 Теперь мы подключимся к определенному серверу базы данных, который мы создали ранее, то есть javatpoint , и с помощью следующей команды: \c javatpoint Этап 3 Наконец, мы выполним команду truncate table, чтобы удалить конкретную таблицу. Чтобы понять работу таблицы PostgreSQL Truncate в режиме реального времени, мы рассмотрим следующие примеры: Удалить все данные из одной таблицы В приведенном ниже примере, чтобы удалить все данные из таблицы student_information , мы используем команду TRUNCATE TABLE: обрезать таблицу student_information; Выход После выполнения вышеуказанной команды мы получим следующий вывод, в котором говорится, что данные таблицы student_information успешно удалены. Приведенная ниже команда используется для сброса значений в конкретном столбце с помощью ПЕРЕЗАПУСТИТЬ ИДЕНТИФИКАЦИЮ опция: TRUNCATE TABLE имя_таблицы ПЕРЕЗАПУСТИТЬ ИДЕНТИФИКАЦИЮ; Давайте посмотрим один пример , где мы пытаемся сбросить значения определенного столбца. Приведенная ниже команда удаляет все строки из таблицы student_information и возвращает порядок, связанный со столбцом stu_name : TRUNCATE TABLE student_information ПЕРЕЗАПУСТИТЬ ИДЕНТИФИКАЦИЮ; Выход После выполнения вышеуказанной команды мы получим следующий вывод, в котором говорится, что записи таблицы student_information были успешно удалены По сути, приведенная выше команда не перезапускает значения в порядке, соответствующем столбцу в таблице student_information , поскольку команда Truncate table по умолчанию использует параметр CONTINUE IDENTITY . Удалить все записи из нескольких таблицЕсли мы хотим одновременно обрезать все записи из одной или нескольких таблиц, мы разделяем каждую таблицу с помощью запятой (,). Синтаксис Приведенный ниже синтаксис используется для Удалить все данные из нескольких таблиц: TRUNCATE TABLE имя_таблицы1, имя_таблицы2 …; Например, Приведенная ниже команда используется для удаления всех данных из лиц и отдел столы: ОБРЕЗАЕМЫЕ лица, отдел; Выход После выполнения вышеуказанной команды мы получим приведенный ниже вывод, который показывает, что данные таблиц Persons и Department были успешно удалены. Удалить все записи из таблицы со ссылками на внешний ключЕсли нам нужно часто усекать таблицу, содержащую ссылки внешнего ключа на другие таблицы и не указанную в команде TRUNCATE TABLE. По умолчанию команда TRUNCATE TABLE не удаляет записи из таблицы со ссылками на внешний ключ. Поэтому в этом случае мы будем использовать опцию CASCADE в команде TRUNCATE TABLE для удаления записей из таблицы и других таблиц, содержащих ссылку на внешний ключ. Синтаксис Основной синтаксис для удаления всех записей из таблицы со ссылками на внешний ключ , как показано ниже: TRUNCATE TABLE имя_таблицы КАСКАД; Например, В приведенном ниже примере мы удалим данные из таблицы employee и других таблиц, которые ссылаются на таблицу person через ограничения внешнего ключа: TRUNCATE TABLE сотрудник CASCADE; Выход После выполнения вышеуказанной команды мы получим вывод ниже, где сотрудник данные таблицы успешно удалены. |