স্থানীয় মেশিনে সিএসভি ফাইলে রিমোট পোস্টগ্রিজ টেবিলটি রফতানি করুন


16

আমার কাছে রিমোট সার্ভারে কেবলমাত্র একটি ডেটাবেজে অ্যাক্সেসের অ্যাক্সেস রয়েছে। সুতরাং, আমি কার্যকর করতে পারি:

COPY products TO '/tmp/products.csv' DELIMITER ',';

তবে সেই সার্ভারে আমার কাছে কোনও ফাইল তৈরি / সংরক্ষণ করার অনুমতি নেই, সুতরাং আমার স্থানীয় মেশিনে এটি করা দরকার।

আমি যখন রিমোট ডাটাবেসের সাথে সংযুক্ত থাকি, তখন আমি কীভাবে আমার স্থানীয় মেশিনে দূরবর্তী সার্ভারের পরিবর্তে ফাইলটি সংরক্ষণ করার জন্য একটি আদেশ প্রয়োগ করতে পারি?

অথবা, আমি কীভাবে একটি দূরবর্তী ডাটাবেসে সংযোগ স্থাপন, একটি কোয়েরি চালাতে এবং একটি স্থানীয় মেশিনে আউটপুটটিকে ফাইল হিসাবে সংরক্ষণ করতে লিনাক্স আদেশটি কার্যকর করতে পারি?

উত্তর:


29

ইতিমধ্যে প্রস্তাবিত উভয় পন্থা অযথা জটিল বলে মনে হচ্ছে।

কেবলমাত্র psqlঅন্তর্নির্মিত \copyকমান্ডটি ব্যবহার করুন যা সার্ভার-সাইডের মতো কাজ COPYকরে তবে তারের প্রোটোকলের মাধ্যমে একটি অনুলিপি ক্লায়েন্টকে দেয় এবং ক্লায়েন্টের পথ ব্যবহার করে।

কারণ এটি একটি psqlব্যাকস্ল্যাশ কমান্ড আপনি পেছনের সেমিকোলন বাদ দিতে পারেন, যেমন:

\copy products TO '/tmp/products.csv' CSV DELIMITER ','

দেখা \copy জন্য ম্যানুয়াল এন্ট্রি psqlকমান্ড এবং COPYকমান্ড documenation আরো বিস্তারিত জন্য।

শুধু COPYআপনি ব্যবহার করতে পারেন \copyএকটি সঙ্গে (SELECT ...)যখন তথ্য কপি (কিন্তু নেই) একটি টেবিল নামের পরিবর্তে জিজ্ঞাস্য।


একটি সাধারণ নিম্নমানের বিকল্প যা কয়েকটি সীমাবদ্ধ পরিস্থিতিতে কার্যকর হতে পারে তা হ'ল:

psql -t -P format=unaligned -P fieldsep_zero=on -c 'SELECT * FROM tablename'

এবং -oকোনও ফাইলে আউটপুট লিখতে পতাকা বা শেল আউটপুট পুনঃনির্দেশ ব্যবহার করুন। আপনি প্রায় সর্বদা \copyএটি পছন্দ হিসাবে ব্যবহার করা উচিত ।


তবে এটি লেনদেনের অনুমতি দেয় না :(
রেজা এস

উম, নিশ্চিত এটি। psqlস্ক্রিপ্ট ফিড করতে এখানে-নথিটি ব্যবহার করুন , এর সাথে শুরু করে BEGINআপনার \copyকমান্ডগুলি করুন, তারপরে এ COMMIT। অথবা psql -fএখানে-ডকুমেন্ট ব্যবহার না করে স্ক্রিপ্ট চালানোর জন্য ব্যবহার করুন।
ক্রেগ রিঞ্জার

ফিরে আসার জন্য ধন্যবাদ ... এটাই আমি শেষ করেছিলাম এবং এটি কাজ করেছে =)
রেজা এস

আপনি এর -Aপরিবর্তে ব্যবহার করতে পারেন -P format=unalignedএবং আমার মনে হয় আপনার একটি দরকার-P fieldsep=,
ইভান ক্যারল

2

লিনাক্স কমান্ডটি হ'ল:

psql -h 127.0.0.1 -U username -o file.csv -c 'select id, name from clients;'

1
এটি সিএসভি উত্পাদন করবে না, এটি ফর্ম্যাটযুক্ত পাঠ্য আউটপুট তৈরি করবে। আপনি যদি -t -P format=unaligned সেই আদেশে যুক্ত হন তবে আপনি কিছুটা কাছে এসেছিলেন যেমন বগি পাইপ-বিস্মৃত CSV এর মতো, তবে পাঠ্যের পাইপগুলি পালাতে পারবেন না তাই এটি অবৈধ।
ক্রেগ রিঞ্জার

ওহ, আপনি চাইলে এগুলি ছাড়াও চাইবেন -P fieldsep=','যে এড়িয়ে যাওয়ার অভাবের কারণে ত্রুটি হওয়ার সম্ভাবনা আরও বেশি। -P fieldsep_zero=onযদি নাল-বাইট-ডিলিমেটেড পাঠ্য পার্স করতে আপনার আপত্তি না মনে হয় তবে তা ঠিক হবে, কারণ নাল বাইটগুলি psqlপ্রাকৃতিকভাবে আউটপুটে আসতে পারে না ।
ক্রেগ রিঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.