2012-04-03 11 views
13

मैं तालिका और तालिका में उपयोग किए गए अनुक्रम को कैस्केड का उपयोग करके एक कथन में छोड़ना चाहता हूं, लेकिन मुझे नोटिस मिल रहा है और तालिका नहीं छोड़ी गई है। उदाहरण के लिए:ड्रॉप अनुक्रम और कैस्केड

CREATE SEQUENCE seq1; 
CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1')); 

और फिर जब मैं कार्य करें:

DROP SEQUENCE seq1 CASCADE; 

मैं संदेश निम्न मिलता है, और टेबल गिरा नहीं है:

NOTICE: drop cascades to default for table t1 column f1 

मैं निश्चित रूप से कुछ गलत कर रहा हूँ, लेकिन PostgreSQL में ये मेरे पहले चरण हैं।

उत्तर

27

आपको निर्भरताओं के बारे में गलतफहमी है। तालिका कभी नहीं एक संबद्ध अनुक्रम का एक आधार वस्तु है और कभी नहीं एक

DROP SEQUENCE ... CASCADE; 

की गिरावट केवल अनुक्रम से ड्राइंग एक डिफ़ॉल्ट मान क्रम पर "निर्भर करता है" और शून्य पर सेट है अनुक्रम हटा दी जाती है है CASCADE के साथ।

यह है इसके विपरीत: यदि अनुक्रम एक तालिका स्तंभ के स्वामित्व में है यह एक

DROP TABLE f1 CASCADE; 

साथ एक दृश्य के लिए छोड़ दिया जाता है एक तालिका स्तंभ द्वारा स्वामित्व के लिए आप के रूप में उपयोग कर सकते हैं या तो serial प्रकार मिलन पहले ही सुझाव दिया है। या आप कर सकते हैं ALTER an existing sequence:

ALTER SEQUENCE seq1 OWNED BY t1.f1; 
3

मुझे नहीं पता कि आप मैन्युअल रूप से अनुक्रम क्यों बना रहे हैं - शायद आपके पास औचित्य हो, या हो सकता है कि यह किसी अन्य डीबीएमएस के साथ काम करने वाली आदतों के कारण हो।

लेकिन यदि आपके पास इसकी विशेष आवश्यकता नहीं है, तो SERIAL छद्म प्रकार का उपयोग करें और जब आप तालिका छोड़ते हैं तो SERIAL कॉलम (ओं) के पीछे अनुक्रम भी गिरा दिया जाएगा।

+0

मैंने शुरू में सोचा कि मैं अनुक्रम प्रारंभ नहीं कर सकता जो SERIAL मैक्रो का उपयोग करता है , लेकिन अब मुझे लगा कि यह एक नियमित अनुक्रम बनाता है जिसे मैं सामान्य रूप से प्रारंभ कर सकता हूं। सीरियल पर स्विचिंग, धन्यवाद। –

3

आपने अनुक्रम छोड़ने और उस क्रिया को कैस्केड करने के लिए कहा। जबकि डिफ़ॉल्ट अनुक्रम के बिना मौजूद नहीं हो सकता है, और इसलिए इसे छोड़ दिया जाता है, इसलिए तालिका और कॉलम अनुक्रम के बिना मौजूद हो सकता है, इसलिए वे रहते हैं।

जिस तरह से आप यह निर्दिष्ट किया है के साथ

, टेबल छोड़ने अनुक्रम छोड़ देंगे नहीं है, हालांकि आप अनुक्रम स्तंभ जिसके साथ यह प्रयोग किया जाता है पर निर्भर कर सकते हैं, और इसलिए यह स्वचालित रूप से अगर आप ड्रॉप ड्रॉप है तालिका। आप अनुक्रम के मालिक को बदलकर ऐसा कर सकते हैं, या इसके बजाय SERIAL का उपयोग कर सकते हैं। एक स्तंभ को घोषित करने के लिए SERIAL स्वचालित रूप से एक अनुक्रम बनाता है, जिससे यह कॉलम के लिए डिफ़ॉल्ट उत्पन्न करता है, और उस स्तंभ को अनुक्रम के स्वामी बनाता है।

0

ड्रॉप झरना तालिका TABLE_NAME; आप इसका भी उपयोग कर सकते हैं ... और मैं आपको प्राथमिक कुंजी के साथ एक धारावाहिक का उपयोग करने की भी सिफारिश करूंगा ताकि आप एक कॉलम को विशिष्ट रूप से पहचान सकें ..

संबंधित मुद्दे