2012-12-26 14 views
8

का उपयोग करते हुए टाइमस्टैम्प कॉलम (dd.mm.yyyy hh.mm.ss) के साथ .csv आयात करना। मैं 0xकमांड का उपयोग कर एक .csv फ़ाइल से डेटा को एक पोस्टग्रेस्क्ल 9.2 डेटाबेस में आयात करने का प्रयास कर रहा हूं (SQL नहीं प्रतिलिपि)।psql copy

इनपुट .csv फ़ाइल में dd.mm.yyyy hh.mm.ss प्रारूप में टाइमस्टैम्प वाला कॉलम होता है।

मैंने डेटाबेस डेटास्टाइल को डीएमवाई का उपयोग करके सेट किया है।

set datestyle 'ISO,DMY' 

दुर्भाग्य से, जब मैं \COPY कमांड चलाएँ:

ERROR: date/time field value out of range: "16.11.2012 07:10:06"

HINT: Perhaps you need a different "datestyle" setting.

CONTEXT: COPY trace, line 2, column timestamp_mes: "16.11.2012 07:10:06"

क्या datestyle साथ कुछ गड़बड़ है:

\COPY gc_test.trace(numpoint,easting,northing,altitude,numsats,pdop,timestamp_mes,duration,ttype,h_error,v_error) 
FROM 'C:\data.csv' WITH DELIMITER ';' CSV HEADER ENCODING 'ISO 8859-1' 

मैं इस त्रुटि मिलती है?

उत्तर

7

क्या आपने datestyle setting of the server सेट करने का प्रयास किया है?

SET datestyle = 'ISO,DMY'; 

आप psql मेटा-आदेश \copy, जो इनपुट फ़ाइल का मतलब है का उपयोग कर रहे ग्राहक के लिए स्थानीय है। लेकिन यह अभी भी सर्वर है जो डेटा-प्रकार मिलान करने के लिए इनपुट को मजबूर करना है।

आम तौर पर, psql मेटा-आदेश \copy जो सर्वर पर COPY invokes और निकटता से संबंधित है के विपरीत .. मैं the manual concerning \set बोली:

Note: This command is unrelated to the SQL command SET.

+0

आपकी सहायता के लिए धन्यवाद। मैंने postgresql.conf फ़ाइल में datestyle = 'iso, dmy' मैन्युअल रूप से कॉन्फ़िगरेशन को संशोधित किया है और आयात अभी ठीक काम करता है। सुनिश्चित नहीं है कि आप यही सुझाव दे रहे हैं। हालांकि मैं एक psql कमांड के साथ सर्वर डेटास्टाइल सेट करने का एक तरीका ढूंढ रहा हूं। – jatobat

+1

ठीक है, postgresql.conf को संशोधित करना इसे करने का एक कट्टरपंथी तरीका है। आप \ \ copy' चलाने से पहले अपने सत्र में बताए गए SQL कमांड को भी जारी कर सकते हैं। फिर सेटिंग केवल उस सत्र के लिए बदल दी गई है। –

+0

मैं सिर्फ 'सेट datestyle = 'आईएसओ, DMY' चल रहा है की कोशिश की है,' एसक्यूएल आदेश संपादक में और उसके बाद psql \ प्रतिलिपि को क्रियान्वित (postgresql.conf फ़ाइल संशोधित करने से पहले), लेकिन मैं पहले के रूप में ही त्रुटि मिली। – jatobat

2

मैं यह मुश्किल 'सेट datestyle' के भीतर लागू करने के लिए मिला psql कमांड लागू करते समय एक ही सत्र। पूरे डेटाबेस/सर्वर (केवल आयात के लिए) पर डेटास्टाइल को बदलने से अन्य उपयोगकर्ताओं या मौजूदा अनुप्रयोगों पर दुष्प्रभाव भी हो सकते हैं। तो मैं आमतौर पर लोड होने से पहले फ़ाइल को संशोधित करता हूं:

#!/bin/bash 
# 
# change from dd.mm.yyyy to yyyy-mm-dd inside the file 
# note: regex searches for date columns separated by semicolon (;) 
sed -i 's/;\([0-9][0-9]\)\.\([0-9][0-9]\)\.\([0-9][0-9][0-9][0-9]\);/;\3-\2-\1;/g' myfile 
# then import file with date column 
psql <connect_string> -c "\COPY mytable FROM 'myfile' ...." 
0

जिस दिनांक शैली का आप उपयोग करना प्रतीत होता है वह जर्मन है। PostgreSQL इस दिनांक शैली का समर्थन करता है। इसका उपयोग करने का प्रयास करें:

SET datestyle TO German; 
संबंधित मुद्दे