PostgreSQL सभी सामग्री को हटा दें


110

नमस्कार मैं अपने पोस्टग्रेस्कल तालिकाओं में सभी डेटा को हटाना चाहता हूं, लेकिन तालिका को ही नहीं। मैं ये कैसे करूं?


जवाबों:



114

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);

टेबल ऑर्डर संदर्भ टेबल ग्राहक और टेबल लॉयल्टी_कार्ड्स संदर्भ टेबल ग्राहक। जब आप उस तालिका से TRUNCATE / DELETE करने का प्रयास करते हैं, जो अन्य तालिका / s (दूसरी तालिका / नाम की तालिका के लिए विदेशी कुंजी बाधा है) द्वारा संदर्भित है, तो आपको एक त्रुटि मिलती है। सभी तीन तालिकाओं से सामग्री को हटाने के लिए आपको इन सभी तालिकाओं को नाम देना होगा (आदेश महत्वपूर्ण नहीं है)

TRUNCATE customers, loyalty_cards, orders;

या सिर्फ़ वह तालिका जिसे CASCADE कुंजी शब्द के साथ संदर्भित किया गया है (आप केवल एक से अधिक टेबल का नाम दे सकते हैं)

TRUNCATE customers CASCADE;

वही pgAdmin के लिए लागू होता है। ग्राहकों की तालिका पर राइट क्लिक करें और Truncate Cascaded चुनें।


TRUNCATEANSI SQL का हिस्सा है, और सभी DBMS में समर्थित है । मैंने लिंक का अनुसरण किया, और दस्तावेज़ में एक्सटेंशन के बारे में कुछ भी उल्लेख नहीं है। शायद लिंक गलत है या पुराना है?
मन्नजो

हम्म, दिलचस्प। उद्धृत पाठ अभी भी यहां पाया जा सकता है: postgresql.org/docs/9.0/static/sql-delete.html लेकिन आप सही हैं - यह 9.1 के लिए डॉक्टर में नहीं है।
vitfo

34

के लिए छोटे टेबल DELETEअक्सर तेजी से होता है और (भारी समवर्ती लोड के लिए) कम आक्रामक लॉकिंग की जरूरत है:

DELETE FROM tbl;

बिना किसी WHEREशर्त के।

के लिए मध्यम या बड़ा टेबल, साथ जाना TRUNCATE tbl, जैसे @Greg तैनात।


5
"छोटा," "मध्यम" और "बड़ा" (आपके अनुमान से) क्या है?
जैक्सन

3
@ जैक्सन: यह बिल्कुल सही है क्योंकि यह बहुत अधिक चर पर निर्भर करता है। आप अपने सिस्टम पर मीठे स्थान को खोजने के लिए कुछ परीक्षण चला सकते हैं।
इरविन ब्रांडीसेट्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.