कोई अंतर्निहित (स्वचालित) कलाकारों से है text
या varchar
करने के लिए integer
(यानी आप एक पारित नहीं हो सकता varchar
की उम्मीद कर एक समारोह के लिए integer
या एक आवंटित varchar
एक करने के लिए क्षेत्र integer
, एक) ताकि आप एक स्पष्ट कलाकारों का उपयोग कर निर्दिष्ट करना होगा ALTER तालिका ... ALTER स्तंभ ... प्रकार। .. उपयोग :
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);
ध्यान दें कि आपके टेक्स्ट फ़ील्ड में व्हॉट्सएप हो सकता है; उस स्थिति में, उपयोग करें:
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);
परिवर्तित करने से पहले सफेद स्थान पर पट्टी करना
यदि आदेश चलाया गया था psql
, तो यह त्रुटि संदेश से स्पष्ट हो गया है , लेकिन यह संभव है कि PgAdmin-III आपको पूर्ण त्रुटि नहीं दिखा रहा है। यहाँ क्या होता है अगर मैं इसे psql
PostgreSQL 9.2 पर परीक्षण करूँ :
=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'), (' 42 ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR: column "x" cannot be cast automatically to type integer
HINT: Specify a USING expression to perform the conversion.
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE
USING
लिंक जोड़ने के लिए @muistooshort धन्यवाद
इससे संबंधित प्रश्न भी देखें ; यह रेलों के पलायन के बारे में है, लेकिन अंतर्निहित कारण समान है और उत्तर लागू होता है।
यदि त्रुटि अभी भी होती है, तो यह कॉलम मानों से संबंधित नहीं हो सकती है, लेकिन इस कॉलम या कॉलम डिफ़ॉल्ट मानों पर अनुक्रमणिका टाइपकास्ट विफल हो सकती हैं। अनुक्रमणिका को ALTER COLUMN से पहले छोड़ने और उसके बाद पुनः बनाए जाने की आवश्यकता है। डिफ़ॉल्ट मानों को उचित रूप से बदला जाना चाहिए।