3 ответов:
использовать
TRUNCATE TABLE.
содержимое таблицы / таблиц в базе данных PostgreSQL можно удалить несколькими способами.
удаление содержимого таблицы с помощью sql:
удаление содержимого одной таблицы:
TRUNCATE table_name; DELETE FROM table_name;удаление содержимого всех именованных таблицах:
TRUNCATE table_a, table_b, …, table_z;удаление содержимого именованных таблиц и таблиц, которые ссылаются на них (я объясню это более подробно позже в этом ответе):
TRUNCATE table_a, table_b CASCADE;удаление содержимого таблицы через pgAdmin:
удаление содержимого одной таблицы:
Right click on the table -> Truncateудаление содержимого таблицы и таблиц, которые ссылаются на него:
Right click on the table -> Truncate Cascadedразница между delete и truncate:
из документации:
удалить удаляет строки, удовлетворяющие предложению WHERE из указанного стол. Если предложение WHERE отсутствует, то все строки удаляются в таблице. http://www.postgresql.org/docs/9.3/static/sql-delete.html
TRUNCATE-это расширение PostgreSQL, которое обеспечивает более быстрый механизм удалить все строки из таблицы. Усечение быстро удаляет все строки из a набор таблиц. Это имеет тот же эффект, что и безоговорочное удаление на каждом таблица, но поскольку она на самом деле не сканирует таблицы, это быстрее. Кроме того, он немедленно освобождает дисковое пространство, а не требует последующая вакуумная операция. Это наиболее полезно на больших столах. http://www.postgresql.org/docs/9.1/static/sql-truncate.html
работа с таблицей, на которую ссылается другая таблица:
когда у вас есть база данных, которая имеет более одной таблицы таблицы, наверное, отношения. В качестве примера можно привести три таблицы:
create table customers ( customer_id int not null, name varchar(20), surname varchar(30), constraint pk_customer primary key (customer_id) ); create table orders ( order_id int not null, number int not null, customer_id int not null, constraint pk_order primary key (order_id), constraint fk_customer foreign key (customer_id) references customers(customer_id) ); create table loyalty_cards ( card_id int not null, card_number varchar(10) not null, customer_id int not null, constraint pk_card primary key (card_id), constraint fk_customer foreign key (customer_id) references customers(customer_id) );и некоторые подготовленные данные для этих таблиц:
insert into customers values (1, 'John', 'Smith'); insert into orders values (10, 1000, 1), (11, 1009, 1), (12, 1010, 1); insert into loyalty_cards values (100, 'A123456789', 1);Стол Заказов ссылается на таблицу заказчиков и таблица loyalty_cards ссылается на таблицу customers. При попытке усечь / удалить из таблицы, на которую ссылается другая таблица/s (другая таблица / s имеет ограничение внешнего ключа для именованной таблицы), вы получаете сообщение об ошибке. Чтобы удалить содержимое из всех трех таблиц вы должны назвать все эти таблицы (порядок не важен)
TRUNCATE customers, loyalty_cards, orders;или просто таблица, на которую ссылается каскадное ключевое слово (вы можете назвать несколько таблиц, а не только одну)
TRUNCATE customers CASCADE;то же самое относится для pgAdmin. Щелкните правой кнопкой мыши на таблице customers и выберите усечь Каскад.
на маленький таблицы
DELETEчасто быстрее и требует менее агрессивной блокировки (для тяжелой одновременной нагрузки):DELETE FROM tbl;С
WHEREсостояние.на средний или больше таблицы, перейдите с
TRUNCATE tbl, как @ Greg posted.
Comments