PostgreSQL সমস্ত সামগ্রী মুছুন delete


108

হ্যালো আমি আমার পোস্টগ্রিস্কিল টেবিলের সমস্ত ডেটা মুছতে চাই, তবে টেবিলটি নিজেই নয়। আমি এই কিভাবে করতে পারে?


উত্তর:



112

পোস্টগ্রাইএসকিউএল ডাটাবেসে সারণী / সারণীর সামগ্রীগুলি বিভিন্ন উপায়ে মুছতে পারে।

স্কয়ার ব্যবহার করে সারণী সামগ্রী মুছে ফেলা হচ্ছে:

একটি টেবিলের সামগ্রী মোছা:

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

মুছুন এবং ছাঁটাইয়ের মধ্যে পার্থক্য:

ডকুমেন্টেশন থেকে:

সারণি মুছে ফেলা হবে যা নির্দিষ্ট সারণী থেকে শর্তটি পূরণ করে। WHERE ধারাটি অনুপস্থিত থাকলে, প্রভাবটি সারণীতে থাকা সমস্ত সারি মুছে ফেলবে। http://www.postgresql.org/docs/9.3/static/sql-delete.html

ট্রুনসেট একটি পোস্টগ্রিসকিউএল এক্সটেনশন যা একটি সারণী থেকে সমস্ত সারি সরিয়ে ফেলার জন্য একটি দ্রুত প্রক্রিয়া সরবরাহ করে। ট্র্যাঙ্কেট দ্রুত সারণীগুলির সেট থেকে সমস্ত সারি সরিয়ে দেয়। এটি প্রতিটি টেবিলে অযোগ্য ডিলেট হিসাবে একই প্রভাব ফেলেছে, তবে যেহেতু এটি টেবিলগুলি আসলে স্ক্যান করে না এটি দ্রুত হয়। তদতিরিক্ত, এটি পরবর্তী ভ্যাকুয়াম অপারেশন প্রয়োজনের চেয়ে তত্ক্ষণাত্ ডিস্কের স্থান দাবি করে। এটি বড় টেবিলগুলিতে সবচেয়ে দরকারী। 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 customers, loyalty_cards, orders;

বা কেবল টেবিল যা CASCADE কী শব্দের সাথে উল্লেখ করা হয়েছে (আপনি কেবলমাত্র একটির চেয়ে বেশি সারণীর নাম রাখতে পারেন)

TRUNCATE customers CASCADE;

একই pgAdmin জন্য প্রযোজ্য। গ্রাহকদের টেবিলের উপর ডান ক্লিক করুন এবং কাটা ক্যাসকেড চয়ন করুন।


TRUNCATEএটি এএনএসআই এসকিউএল এর একটি অংশ, এবং সমস্ত ডিবিএমএসে সমর্থিত । আমি লিঙ্কটি অনুসরণ করেছি এবং দস্তাবেজটিতে এক্সটেনশন সম্পর্কে কিছুই উল্লেখ করা হয়নি। সম্ভবত লিঙ্কটি ভুল বা পুরানো?
মাংগো

এইচএম, আকর্ষণীয়। উদ্ধৃত পাঠ্যটি এখানে এখনও পাওয়া যাবে: postgresql.org/docs/9.0/static/sql-delete.html তবে আপনি ঠিক বলেছেন - এটি 9.1-এ ডকুমেন্টে নেই।
ভিটিফো

34

জন্য ছোট টেবিল DELETEপ্রায়ই দ্রুততর এবং (ভারী সমবর্তী লোড জন্য) কম আক্রমনাত্মক লকিং দরকার:

DELETE FROM tbl;

কোনও WHEREশর্ত ছাড়াই ।

জন্য মাঝারি বা বড় টেবিল, সঙ্গে যেতে TRUNCATE tbl, মত @Greg পোস্ট করা হয়েছে।


5
"ছোট," "মাঝারি" এবং "বড়" কী (আপনার অনুমান অনুসারে)?
জ্যাকসন

3
@ জ্যাকসন: ঠিক এটি পিন করা শক্ত কারণ এটি অনেকগুলি ভেরিয়েবলের উপর নির্ভর করে। আপনি আপনার সিস্টেমে মিষ্টি স্থানটি খুঁজতে কিছু পরীক্ষা চালাতে পারেন।
এরউইন ব্র্যান্ডস্টেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.