सबसे पहले, आप +
. के साथ दो स्ट्रिंग्स को जोड़ने का प्रयास कर रहे हैं ऑपरेटर, लेकिन संयोजन के लिए SQL ऑपरेटर ||
. है , उस जानकारी के साथ, आप सोच सकते हैं कि अपेक्षित परिणाम होगा (काम नहीं करेगा ):
\set path '''c:\\server\\data\\'''
COPY paymentMethods (name,regexString) FROM :path || 'paymentMethods.csv' WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM :path || 'priceLevels.csv' WITH (FORMAT csv, HEADER false);
परंतु! COPY
कमांड पथ के लिए एक शाब्दिक स्ट्रिंग की अपेक्षा करता है, अभिव्यक्ति नहीं, इसलिए आपको वास्तव में पथ देना चाहिए। ध्यान दें कि यह SELECT
. जैसे कमांड के लिए काम करेगा , INSERT
, UPDATE
, आदि.
उस जानकारी के साथ, आप केवल psql
. का उपयोग कर सकते हैं चर, जैसा कि पावेल ने बताया, और स्ट्रिंग्स को psql
. में संयोजित करें चर है। एक अच्छा समाधान psql
. का उपयोग करना है का :'var'
सिंटैक्स, जो वैरिएबल को SQL एक्सप्रेशन में एक स्ट्रिंग के रूप में सम्मिलित करता है:
\set path 'c:\\server\\data\\'
\set paymentMethodsPath :path 'paymentMethods.csv'
\set priceLevelsPath :path 'priceLevels.csv'
COPY paymentMethods (name,regexString) FROM :'paymentMethodsPath' WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM :'priceLevels' WITH (FORMAT csv, HEADER false);
जो उत्पन्न करेगा (PostgreSQL के सर्वर को भेजेगा):
COPY paymentMethods (name,regexString) FROM E'c:\\server\\data\\paymentMethods.csv' WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM E'c:\\server\\data\\priceLevels.csv' WITH (FORMAT csv, HEADER false);
यह :'var'
सिंटैक्स सभी psql
पर काम नहीं करेगा संस्करण (मुझे अब याद नहीं है कि यह कौन सा पेश किया गया था), लेकिन पुराने संस्करणों के लिए आप आसानी से डॉलर-उद्धरण का उपयोग कर सकते हैं:
\set path 'c:\\server\\data\\'
\set paymentMethodsPath :path 'paymentMethods.csv'
\set priceLevelsPath :path 'priceLevels.csv'
COPY paymentMethods (name,regexString) FROM $$:paymentMethodsPath$$ WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM $$:priceLevels$$ WITH (FORMAT csv, HEADER false);
या एकल-उद्धरणों में भाग लें:
\set path 'c:\\server\\data\\'
\set paymentMethodsPath 'E''':path'paymentMethods.csv'''
\set priceLevelsPath 'E''':path'priceLevels.csv'''
COPY paymentMethods (name,regexString) FROM :paymentMethodsPath WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM :priceLevels WITH (FORMAT csv, HEADER false);
बस इतना ही।