Как удалить все таблицы в базе postgresql
Перейти к содержимому

Как удалить все таблицы в базе postgresql

  • автор:

Как удалить все таблицы в базе postgresql

Для удаления данных в PostgreSQL применяется команда DELETE . Она имеет следующий синтаксис:

DELETE FROM имя_таблицы [WHERE условие_удаления]

Например, удалим строки, у которых производитель — Apple:

DELETE FROM Products WHERE Manufacturer='Apple';

DELETE и удаление данных в PostgreSQL

Или удалим все товары, производителем которых является HTC и которые имеют цену меньше 35000:

DELETE FROM Products WHERE Manufacturer='HTC' AND Price < 15000;

Если необходимо вовсе удалить все строки вне зависимости от условия, то условие можно не указывать:

DELETE FROM Products;

Как удалить все таблицы в базе postgresql

Для создания таблиц применяется команда CREATE TABLE , после которой указывается название таблицы. Также с этой командой можно использовать ряд операторов, которые определяют столбцы таблицы и их атрибуты. Общий синтаксис создания таблицы выглядит следующим образом:

CREATE TABLE название_таблицы (название_столбца1 тип_данных атрибуты_столбца1, название_столбца2 тип_данных атрибуты_столбца2, . название_столбцаN тип_данных атрибуты_столбцаN, атрибуты_таблицы );

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

Например, создадим таблицу в базе данных через pgAdmin. Для этого вначале выберем в pgAdmin целевую базу данных, нажмем на нее правой кнопкой мыши и в контекстном меню выберем пункт Query Tool. :

Создание таблицы в базе данных PostgreSQL

После этого откроется поле для ввода кода на SQL. Причем таблица будет создаваться именно для той базы данных, для которой мы откровыем это поле для ввода SQL.

Далее в открывшееся в центральной части программы поле введем следующий набор выражений:

CREATE TABLE customers ( Id SERIAL PRIMARY KEY, FirstName CHARACTER VARYING(30), LastName CHARACTER VARYING(30), Email CHARACTER VARYING(30), Age INTEGER );

В данном случае в таблице Customers определяются пять столбцов: Id, FirstName, LastName, Age, Email. Первый столбец - Id представляет идентификатор клиента, он служит первичным ключом и поэтому имеет тип SERIAL . Фактически данный столбец будет хранить числовое значение 1, 2, 3 и т.д., которое для каждой новой строки будет автоматически увеличиваться на единицу.

Следующие три столбца представляют имя, фамилию клиента и его электронный адрес и имеют тип CHARACTER VARYING(30) , то есть представляют строку длиной не более 30 символов.

Последний столбец - Age представляет возраст пользователя и имеет тип INTEGER , то есть хранит числа.

Создание таблицы в pgAdmin

И после выполнения этой команды в выбранную базу данных будет добавлена таблица customers.

Удаление таблиц

Для удаления таблиц используется команда DROP TABLE , которая имеет следующий синтаксис:

DROP TABLE table1 [, table2, . ];

Например, удаление таблицы customers:

DROP TABLE customers;

19 Сен 2017 16:09:40 | 0 comments

Как удалить все таблицы из БД PostgreSQL и MySQL ?

Многие конечно не будут заморачиваться удалением таблиц и удалят и создадут заново базу, это удобно если у Вас только один пользователь имеет доступ к БД с простыми набором правами, но пользователей много, то удаление может быть не самой хорошей идеей.

Итак как удалить все таблицы из БД PostgreSQL и MySQL читаем ниже…

Удаление всех таблиц в БД для PostgreSQL:

1. Сохраняем список таблиц в файл:

psql -U PGUSER -t -d PGDBNAME -c \ "SELECT 'DROP TABLE ' || n.nspname || '.' || c.relname || ' CASCADE;' \ FROM pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n \ ON n.oid = c.relnamespace WHERE relkind = 'r' AND n.nspname NOT IN \ ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid)" \ > /tmp/droptables

2. Удаляем таблицы:

psql -U PGUSER -d PGDBNAME -f /tmp/droptables

,где
PGUSER — имя пользователя
PGDBNAME — имя БД в которой нужно удалить все таблицы

Удаление всех таблиц в БД для MySQL:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD";mysql -N -s -u $USER -p$PASSWD $DB -e 'show tables' | awk '' | mysql -u $USER -p$PASSWD $DB

,где в переменных
DB — база в которой нужно удалить все таблицы
USER и PASSWD — логин и пароль пользователя у которого есть полные права на базу из переменной DB в которой нужно удалить все таблицы.

Так же получить список таблиц в БД можно через INFORMATION_SCHEMA и тогда запрос удаления всех таблиц будет такой:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD"; mysql -N -s -u $USER -p$PASSWD -e "SELECT CONCAT('DROP TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('$DB');" | mysql -u $USER -p$PASSWD

Если при удалении таблиц у нас появляется ошибка:
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails
то перед удалением нужно отключить проверку на Foreign Key командой: SET FOREIGN_KEY_CHECKS=0;
а потом включить: SET FOREIGN_KEY_CHECKS=1;
Таким образом полная команда удаления всех таблиц из БД будет такого вида:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD"; mysql -N -s -u $USER -p$PASSWD -e "SELECT CONCAT('SET FOREIGN_KEY_CHECKS=0;'); SELECT CONCAT('DROP TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('$DB'); SELECT CONCAT('SET FOREIGN_KEY_CHECKS=1;');" | mysql -u $USER -p$PASSWD

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

PostgreSQL. Как удалить все данные из таблицы большого размера?

Но спустя какое-то время после запуска команды в выводе отобразилось, что удалено N-ое (число было большим) кол-во строк, но размер таблицы остался прежним (полагаю, количество строк также не изменилось). Впервые столкнулся с такой задачей и не знаю, что с этим делать. Собственно, вопрос: как можно удалить все данные из таблицы logs ? У таблицы есть только Primary Key, индексов нет.

Отслеживать
задан 13 апр 2021 в 9:15
Andrei Khotko Andrei Khotko
5,045 22 22 серебряных знака 55 55 бронзовых знаков

Закон подлости: сидел 2 часа не мог найти ответ, и вот спустя 10 минут после того, как задал вопрос, нашел его. Использовал TRUNCATE

13 апр 2021 в 9:24

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если необходимо удалить именно всё - то нужен truncate .

delete никогда не возвращает дисковое пространство напрямую. PostgreSQL - MVCC база, delete только отмечает строку удалённой. Затем приходит autovacuum (либо вручную вызывается vacuum ), который вычищает из файлов таблицы мёртвые, никому более недоступные версии строк. В конце работы vacuum проверяет, нет ли в конце таблицы страниц данных, в которых не осталось строк. Если есть - то пробует усечь размер таблицы. Размеры индексов сами никогда не уменьшаются (для этого нужен reindex ). Сверх того радости добавляет, что все эти операции пишутся в wal в полном объёме.

truncate же просто выделяет новые пустые датафайлы и удаляет старые. Поэтому для задачи очистить всё - несравнимо эффективнее. Хотя и требует эксклюзивную блокировку.

Отслеживать
ответ дан 13 апр 2021 в 9:44
22k 3 3 золотых знака 29 29 серебряных знаков 53 53 бронзовых знака

  • база-данных
  • postgresql
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.5.3.8609

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

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