स्वीकृत उत्तर में समाधान केवल सर्वर पर काम करेगा और जब क्वेरी निष्पादित करने वाले उपयोगकर्ता को इस SO उत्तर में बताए अनुसार फ़ाइल को पढ़ने की अनुमति होगी।
अन्यथा, अधिक लचीला तरीका SQL के COPY
. को प्रतिस्थापित करना है psql
. के साथ कमांड करें का "मेटा-कमांड" जिसे \copy
कहा जाता है जो "असली" कॉपी के समान सभी विकल्प लेता है, लेकिन क्लाइंट के अंदर चलाया जाता है (बिना किसी आवश्यकता के ;
अंत में):
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"
दस्तावेज़ों के अनुसार, \copy
आदेश:
एक फ्रंटएंड (क्लाइंट) कॉपी करता है। यह एक ऑपरेशन है जो SQL COPY कमांड चलाता है, लेकिन सर्वर द्वारा निर्दिष्ट फ़ाइल को पढ़ने या लिखने के बजाय, psql फ़ाइल को पढ़ता या लिखता है और सर्वर और स्थानीय फ़ाइल सिस्टम के बीच डेटा को रूट करता है। इसका मतलब है कि फ़ाइल पहुंच और विशेषाधिकार स्थानीय उपयोगकर्ता के हैं, सर्वर नहीं, और किसी SQL सुपरयुसर विशेषाधिकारों की आवश्यकता नहीं है।
इसके अलावा, यदि the_file.csv
पहली पंक्ति में हेडर होता है, इसे header
. जोड़कर पहचाना जा सकता है उपरोक्त आदेश के अंत में:
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"