आप अपने प्रश्न में जो वर्णन करते हैं वह स्पष्ट रूप से नहीं है कि वास्तव में क्या हो रहा है। COPY
एक date
. में अनावश्यक सिंगल कोट्स के साथ स्ट्रिंग अक्षर आयात करने का प्रयास विफल हो जाएगा कॉलम।
अनावश्यक उद्धरणों से छुटकारा पाने के लिए, एक अस्थायी तालिका text
. के साथ कॉलम, फिर INSERT INTO
लक्ष्य तालिका उद्धरणों को ट्रिम कर रही है:
CREATE TEMP TABLE wtmp (
city text
, temp_lo int
, temp_hi int
, prcp real
, date text -- note how I use text here.
);
COPY wtmp FROM '~aviad/postsgres/playground/weather.txt';
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
SELECT city, temp_lo, temp_hi, prcp, trim(date, '''')::date
FROM wtmp
-- ORDER BY ?
;
आपके सत्र के अंत में अस्थायी तालिका स्वचालित रूप से हटा दी जाती है।
आरक्षित शब्द पहचानकर्ता के रूप में
मैं देख रहा हूं कि आपने मैनुअल से उदाहरण की प्रतिलिपि बनाई है। यहां वर्तमान मैनुअल का डीप लिंक है। ।
सही होते हुए भी मैनुअल में वह उदाहरण दुर्भाग्यपूर्ण है। मेरी सलाह है कि आरक्षित शब्दों जैसे date
कॉलम नामों के रूप में। जैसा कि आप यहां
देख सकते हैं date
प्रत्येक SQL मानक में एक आरक्षित शब्द है। इसे पोस्टग्रेज में उपयोग करने की अनुमति है और मैं देख सकता हूं कि यह एक साधारण उदाहरण के लिए कितना आकर्षक है। लेकिन यह इसे एक अच्छा विचार नहीं बनाता है। आम तौर पर, आपको से बचने . की आदत होनी चाहिए पहचानकर्ता के रूप में आरक्षित शब्द। यह भ्रामक त्रुटि संदेशों और अनावश्यक रूप से असंगत SQL कोड की ओर ले जाता है।