PostgreSQL আরও আউটপুট অক্ষম করে


146

আমি আমার পোস্টগ্রিজ এসকিউএল সার্ভারে একটি স্ক্রিপ্ট চালাচ্ছি:

psql db -f sql.sql

থেকে bashবা কোনও cronস্ক্রিপ্টে।

এটি আউটপুট moreবা এর সাথে প্যাগিনেট করার চেষ্টা চালিয়ে যায় less

আমি কীভাবে ফলাফলের পৃষ্ঠাটি অক্ষম করব psql?

আমি যা করতে চাই তা হ'ল ডেটা পরিবর্তন করা, আমি কোনও আউটপুট নিয়ে মাথা ঘামাই না।

উত্তর:


244

পৃষ্ঠাসমূহ অক্ষম করতে তবে আউটপুট ধরে রাখতে , ব্যবহার করুন:

\pset pager off

এই সেটিংটি মনে রাখার জন্য, এটি আপনার ~ / .psqlrc এ যুক্ত করুন

দেখুন psql ম্যানুয়াল

পিজির পুরানো সংস্করণগুলিতে এটি কেবল একটি টগল ছিল \pset pager

কোয়েরি আউটপুট পুরোপুরি দমন করতে \o /dev/null, আপনার psqlস্ক্রিপ্টে ব্যবহার করুন ।

psqlএর তথ্যের আউটপুট দমন করতে , এটি চালান -qবা QUIET=1পরিবেশে সেট করুন।


ফল এবং তাদের বর্জন করা আপনাকে পুনঃনির্দেশিত করতে stdoutকরতে /dev/nullসঙ্গে

psql db -f sql.sql >/dev/null

আপনি stdout এবং stderr উভয়ই এর সাথে পুনঃনির্দেশ করতে পারেন:

psql db -f sql.sql >&/dev/null

তবে আমি এটি প্রস্তাব দিচ্ছি না, কারণ এটি ত্রুটি সম্পর্কিত তথ্য ফেলে দেবে যা আপনাকে সতর্ক করতে পারে যে কিছু ঠিক হচ্ছে না। আপনি ফলাফলও তৈরি করে এনে ফেলে দিচ্ছেন, যা অদক্ষ; আপনার ক্যোয়ারীগুলি সামঞ্জস্য করে প্রথমে এগুলি উত্পাদন না করা আপনার পক্ষে ভাল।


এটি পেজার ব্যবহার করা থামিয়ে দেয় কিন্তু আউটপুট থামায় না, না? আমি অনুমান করছি যে আপনাকে PAGER="/dev/null" psql db -P pager=always -f sql.sqlএটি সর্বদা আউটপুট মারতে হবে।
হ্যারাল্ড ব্রিংখফ

112

আমি এটিও সন্ধান করছিলাম, আমি সার্ভারফল্টে একটি অনুরূপ প্রশ্নের মধ্যে উপায়টি পেয়েছি:

psql -P pager=off <other params>

আউটপুট চাপা না রেখে পেজিং জিনিসটি বন্ধ করে দেয়।


4
এই উত্তরটি ম্যান পৃষ্ঠাতে -পি সম্পর্কে যে কোনও কিছুর চেয়ে বেশি সহায়ক ছিল was ধন্যবাদ!
উত্তর

এটাই আমার ঠিক দরকার। ধন্যবাদ :)
প্রদীপ দাস

13

এখানে অন্য বিকল্প। এটির সুবিধাটি হ'ল আপনাকে পিএসকিএল বিকল্পগুলির নাম ইত্যাদি মনে রাখতে হবে না

psql ... | cat

পরম প্রতিবাদ! +1
sjas

11

বাশ, শেল হয়ে , আপনার 2 টি স্ট্রিম রয়েছে যা আপনি সেই আউটপুট ডেটাটি পুনঃনির্দেশ করতে পারবেন: স্টডআউট এবং স্ট্ডার, কারণ এই আউটপুটটি কোথাও পুনঃনির্দেশিত করা দরকার, লিনাক্সের একটি নির্দিষ্ট 'সবকিছু বাতিল করুন' নোড / দেব / নাল মাধ্যমে পৌঁছাতে পারে । আপনি সেখানে যা কিছু পাঠাবেন তা কেবল অকার্যকর হয়ে যাবে।

(শাঁসের একটি ইনপুট স্ট্রিম রয়েছে তবে আমি এটিকে এড়িয়ে যাব কারণ আপনি আউটপুট দমন করার জন্য বলেছিলেন)

এই স্ট্রীমগুলি সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয়: স্টাডআউটের জন্য 1 এবং স্টাডারের জন্য 2।

সুতরাং আপনি করতে চাই যদি আপনি শুধু stdout- এ পুনর্নির্দেশ করতে চান যে সঙ্গে <এবং >অপারেটরদের (মূলত যেখানে এটি পয়েন্ট যেখানে ডেটাতে প্রবাহিত হয়)

ধরা যাক আমরা স্টাডাউটকে দমন করতে চাই (/ dev / নালকে পুনর্নির্দেশ):

psql db -f sql.sql > /dev/null

আপনি দেখতে পাচ্ছেন যে এটি স্টডআউটটি ডিফল্ট, আপনি যে স্ট্রিম নম্বরটি লিখতে চান তা ব্যবহার করতে চাইলে কোনও স্ট্রিম নম্বর ব্যবহার করা হয়নি

psql db -f sql.sql 1> /dev/null

এখন আপনি যদি স্টেডারর (স্ট্রিম নম্বর 2) দমন করতে চান তবে আপনি ব্যবহার করুন

psql db -f sql.sql 2> /dev/null

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

psql db -f sql.sql 2>&1 > log.txt

মনে রাখবেন এর মধ্যে ফাঁকা স্থান থাকতে পারে না 2>&1

পরিশেষে এবং কখনও কখনও সর্বাধিক আকর্ষণীয় হ'ল সত্যটি হ'ল আপনি সমস্ত আউটপুটটি ব্যবহার করে দমন করতে পারেন &>, যখন আপনি এটি 'পুরোপুরি শান্ত' চান

psql db -f sql.sql &> /dev/null


1
যদিও এই তথ্যটি নীতিগতভাবে সাধ্যজনক, তবে এই নির্দিষ্ট ক্ষেত্রে এটি মোটেও কাজ করে না, কারণ পিএসকিএল স্ট্যাডারকে তথ্যমূলক বার্তা প্রেরণ করে না। তারা stdout ডেটা সঙ্গে মিলিত হয়।
জনাথন হার্টলি

হঠাৎ আমি বুঝতে পারি যে আপনার বক্তব্যটি হ'ল চূড়ান্ত '&>' কেস সমস্ত আউটপুট দমন করে পেজার থামাতে ওপি ব্যবহার করতে পারে। আপনি যদি কোনওভাবে আপনার উত্তরটি সংশোধন করেন তবে আমি আমার ডাউনটোটটি সরিয়ে ফেলব।
জোনাথন হার্টলি


2
psql -U user -P pager=off -d database -c 'SQL';

2
সাধারণত বেনাম কোডের কয়েকটি সারি পোস্ট করার পরিবর্তে কোনও সমাধান ব্যাখ্যা করা ভাল। আপনি কীভাবে আমি একটি ভাল উত্তর লিখতে পারি এবং পুরো কোড ভিত্তিক উত্তরগুলিও ব্যাখ্যা
আন ফাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.