text
. से कोई अंतर्निहित (स्वचालित) कास्ट नहीं है या varchar
से integer
(यानी आप varchar
. पास नहीं कर सकते integer
. की अपेक्षा वाले फ़ंक्शन के लिए या एक varchar
असाइन करें एक integer
. के लिए फ़ील्ड one), इसलिए आपको ALTER TABLE ... ALTER COLUMN ... TYPE ... USING:
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 से पहले छोड़ना होगा और उसके बाद फिर से बनाना होगा। डिफ़ॉल्ट मानों को उचित रूप से बदला जाना चाहिए।