Відповіді:
Використовуйте 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 видаляє рядки, які задовольняють пункт WHERE із зазначеної таблиці. Якщо пункт WHERE відсутній, ефектом є видалення всіх рядків таблиці. http://www.postgresql.org/docs/9.3/static/sql-delete.html
TRUNCATE - розширення PostgreSQL, яке забезпечує більш швидкий механізм видалення всіх рядків із таблиці. TRUNCATE швидко видаляє всі рядки з набору таблиць. Він має такий же ефект, як і некваліфікований DELETE на кожній таблиці, але оскільки він насправді не сканує таблиці, він швидше. Крім того, він повертає дисковий простір негайно, а не вимагає подальшої операції VACUUM. Це найбільш корисно на великих столах. 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);
Посилання на таблиці замовлень клієнтів та таблиці таблиць лояльності_картки. Якщо ви намагаєтесь ВІДКРИТИ / ВІДКЛЮЧИТИ З таблиці, на яку посилається інша таблиця / s (інша таблиця / s має обмеження зовнішнього ключа до названої таблиці), ви отримуєте помилку. Щоб видалити вміст з усіх трьох таблиць, ви повинні назвати всі ці таблиці (порядок не важливий)
TRUNCATE customers, loyalty_cards, orders;
або просто таблицю, на яку посилається ключове слово CASCADE (можна назвати більше таблиць, ніж лише одну)
TRUNCATE customers CASCADE;
Те саме стосується і pgAdmin. Клацніть правою кнопкою миші на таблиці клієнтів і оберіть «Скарочити каскад».
TRUNCATE
є частиною ANSI SQL і підтримується у всіх СУБД. Я перейшов за посиланням, і в документі нічого не згадується про розширення. Можливо, посилання неправильне або застаріле?
Для невеликих столів DELETE
часто швидше і потребує менш агресивного блокування (для великого одночасного навантаження):
DELETE FROM tbl;
Без WHERE
умови.
Для середніх або більших таблиць використовуйте TRUNCATE tbl
, як @Greg розміщено.