9.5 या बाद के संस्करण पोस्ट करें
IF NOT EXISTS
CREATE SEQUENCE
में जोड़ा गया था पोस्टग्रेज 9.5 में। अब यही सरल उपाय है:
CREATE SEQUENCE IF NOT EXISTS myschema.myseq;
लेकिन वैसे भी पुराने उत्तर के विवरण पर विचार करें ...
और आप serial
. के बारे में जानते हैं या IDENTITY
कॉलम, है ना?
- ऑटो इंक्रीमेंट टेबल कॉलम
9.4 या पुराने को पोस्ट करें
अनुक्रम नामस्थान को कई अन्य तालिका जैसी वस्तुओं के साथ साझा करते हैं। मैनुअल:
<ब्लॉकक्वॉट>अनुक्रम का नाम किसी अन्य अनुक्रम, तालिका, अनुक्रमणिका, दृश्य या विदेशी तालिका के नाम से भिन्न होना चाहिए उसी स्कीमा में।
बोल्ड जोर मेरा। तो तीन मामले हैं:
- नाम मौजूद नहीं है। -> अनुक्रम बनाएं।
- समान नाम वाला अनुक्रम मौजूद है। -> कुछ न करें? कोई आउटपुट? कोई लॉगिंग?
- इसी नाम की अन्य परस्पर विरोधी वस्तु मौजूद है। -> कुछ करें? कोई आउटपुट? कोई लॉगिंग?
निर्दिष्ट करें कि किसी भी मामले में क्या करना है। ए DO
बयान इस तरह दिख सकता है:
DO
$do$
DECLARE
_kind "char";
BEGIN
SELECT relkind
FROM pg_class
WHERE oid = 'myschema.myseq'::regclass -- sequence name, optionally schema-qualified
INTO _kind;
IF NOT FOUND THEN -- name is free
CREATE SEQUENCE myschema.myseq;
ELSIF _kind = 'S' THEN -- sequence exists
-- do nothing?
ELSE -- object name exists for different kind
-- do something!
END IF;
END
$do$;
वस्तु के प्रकार (relkind
) pg_class
. में मैनुअल के अनुसार:
r =साधारण तालिका
i =अनुक्रमणिका
S =अनुक्रम
v =दृश्य
m =भौतिक दृश्य
c =समग्र प्रकार
t =टोस्ट तालिका
f =विदेशी तालिका
संबंधित:
- किसी दिए गए स्कीमा में तालिका मौजूद है या नहीं, इसकी जांच कैसे करें