পিএসকিএল - কমান্ডের ফলাফলগুলি একটি ফাইলে সংরক্ষণ করুন


283

আমি \dtএকটি ডাটাবেসে সমস্ত সারণী তালিকাবদ্ধ করতে পিএসকিএল এর ব্যবহার করছি এবং ফলাফলগুলি সংরক্ষণ করা দরকার to

একটি ফাইলের মধ্যে একটি পিএসকিএল কমান্ডের ফলাফল রফতানি করার সিনট্যাক্সটি কী?


উত্তর:


478

পিএসকিএল এর সহায়তা থেকে ( \?):

\ o [ফাইল] সমস্ত প্রশ্নের ফলাফল ফাইল বা | পাইপে প্রেরণ করুন

কমান্ডের ক্রমটি এর মতো দেখাবে:

[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

db=>\o out.txt
db=>\dt
db=>\q

1
আমি কি এটি ডেটের আগে বা সংমিশ্রণে কল করি? দয়া করে সিনট্যাক্স ধন্যবাদ অন্তর্ভুক্ত করুন।
pstanton

118
টাইপিং \oআবার এটি বন্ধ করে।
কার্ল জি

3
দুঃখের বিষয়, আউটপুট \?ফাইল যায় না। :(
blitzen9872

আপনার ধরণের উপলব্ধি অস্বীকারের জন্য প্রশাসক হিসাবে পিএসকিএল চালানোর চেষ্টা করুন
অজয় তাকুর

1
হ্যাঁ, \o queries-output.txtফাইলের নাম queries-output.txtএবং টাইপ করার জন্য পরবর্তী সমস্ত কমান্ড o / p পুনঃনির্দেশিত করে \o( পিএসএইচএল প্রম্পটে আবার) এই পুনঃনির্দেশ আচরণকে ফিরিয়ে দেয়।
হিজল

95

পিএসকিএল \oকমান্ডটি ইতিমধ্যে jhwist বর্ণনা করেছেন।

একটি বিকল্প পদ্ধতির মাধ্যমে COPY TOসার্ভারের কোনও ফাইলে সরাসরি লিখতে কমান্ডটি ব্যবহার করা হচ্ছে। এটির সুবিধাটি হ'ল এটি আপনার পছন্দসই একটি সহজে-পার্স ফরম্যাটে ফেলে দেওয়া হয়েছে - পিএসএইচএল এর ট্যাবুলেটেড বিন্যাসের চেয়ে। এটি ব্যবহার করে অন্য টেবিল / ডাটাবেসে আমদানি করা খুব সহজ COPY FROM

বিশেষ দ্রষ্টব্য! এটির জন্য সুপারভাইজার সুবিধাগুলি প্রয়োজন এবং এটি সার্ভারের কোনও ফাইলে লিখবে ।

উদাহরণ: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

';' দিয়ে একটি সিএসভি ফাইল তৈরি করে; ক্ষেত্র বিভাজক হিসাবে।

সর্বদা হিসাবে, বিশদ জন্য ডকুমেন্টেশন দেখুন


আমি @ হেলভেটের সাথে একমত, এখানে উপস্থাপিত পদ্ধতিটি ব্যবহারকারীকে আরও কাস্টমাইজিং উপায়ে আউটপুট কনফিগার করতে আরও শক্তি সরবরাহ করে
নাথান বেন্টন

27

\copyযেটি পোস্টগ্রিস কমান্ডটি যে কোনও ব্যবহারকারীর জন্য কাজ করতে পারে। এটি \ dt এর জন্য কাজ করে কিনা তা জানেন না, তবে সাধারণ সিনট্যাক্সটি নীচের লিঙ্ক থেকে পোস্ট করা হয়েছে এসকিউএল অনুলিপি সিনট্যাক্স

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','

উপরেরটি সিএসভি ফাইল হিসাবে প্রদত্ত ফাইল নামটিতে নির্বাচিত ক্যোয়ারির আউটপুট সংরক্ষণ করবে

সম্পাদনা করুন:

আমার পিএসকিএল সার্ভারের জন্য নিম্নলিখিত কমান্ডটি এটি পুরানো সংস্করণ v8.5 .5

copy (select * from table1) to 'full_path_filename' csv header;

খুব সহজ, ধন্যবাদ। তবে 'অনুলিপি' ... ... তে অনুলিপি করার দরকার নেই - বাস্তবে সাম্প্রতিক সংস্করণগুলিতে এটি কমান্ডটি ব্যর্থ করে দেয়।
টম

টম, আমি মনে করি এটি একটি টাইপ ছিল। আমার ইন্সটলেশন pgsql 8.5ver এ কাজ করে এমন একটি সহ পোস্টটি সম্পাদনা করেছেন
আকাশ গুপ্ত

Anyone অনুলিপি করার পরে এবং বহু বিভ্রান্তিকর সিনট্যাক্স ত্রুটিগুলি পাওয়ার পরে যে কোনও একটির জন্য বহু-লাইন স্টেটমেন্টে আটকানোর চেষ্টা করার জন্য কেবলমাত্র একটি দ্রুত নোট, যেমনটি আমি করেছি just আপনাকে line অনুলিপি হিসাবে একই লাইনে চালিয়ে যেতে হবে।
46

\ অনুলিপি বন্ধ করার কোনও উপায় আছে? আমি দেখতে পেয়েছি যে আমি যদি আপনার উদাহরণের মতো একটি বিবৃতি চালাই এবং তারপরে আমি চালিত করি, উদাহরণস্বরূপ, ব্যবহারকারীদের থেকে * নির্বাচন করুন; এটি স্ক্রিনে আউটপুট না দিয়ে আমি উল্লেখ করা সর্বাধিক সাম্প্রতিক ফাইলটিতে ফলাফল যুক্ত করবে। ধন্যবাদ.
র্যাপেল 75

6

Pgsql কমান্ডের o প্যারামিটার ব্যবহার করুন।

-o, --output = FILENAME ক্যোয়ারী ফলাফল ফাইল (বা | পাইপ) প্রেরণ করুন

psql -d DatabaseName -U UserName -c "SELECT * FROM TABLE" -o /root/Desktop/file.txt

3

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; এই কমান্ডটি পুরো টেবিলটি সিএসভি হিসাবে সংরক্ষণ করতে ব্যবহৃত হয়


পোস্টগ্রিসে কপির সাথে ডিবি অ্যাডমিনের প্রয়োজন এড়াতে \ কপি দ্বারা আরও ভাল প্রতিস্থাপন করা হয়। উইন্ডোজে এটি ফাইলটি সি: \ টেম্পে
জানুয়ারী

3

আপনি যদি নিম্নলিখিত ত্রুটি পেয়ে থাকেন ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

আপনি এটি এইভাবে চালাতে পারেন:

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv


2

সিএসভি ফাইলের ফলাফল সংরক্ষণের জন্য নীচে ক্যোয়ারী ব্যবহার করুন

file ফাইলের পথের সিএসভি শিরোনামে অনুলিপি করুন (আপনার ক্যোয়ারী);

উদাহরণ

purchase অনুলিপি (ক্রয়_অর্ডার থেকে নাম, তারিখ_অর্ডার নির্বাচন করুন) '/home/ankit/Desktop/result.csv' সিভিএস শিরোনামে;

আশা করি এটি আপনাকে সাহায্য করবে।


1

আমি ধরে নিচ্ছি যে এর জন্য কিছু অভ্যন্তরীণ পিএসকিএল কমান্ড রয়েছে তবে আপনি ব্যবহার -লিনাক্স-এনজি প্যাকেজ scriptথেকে কমান্ডটি চালাতে পারেন :

বর্ণনার স্ক্রিপ্টটি আপনার টার্মিনালে মুদ্রিত প্রতিটি কিছুর টাইপস্ক্রিপ্ট তৈরি করে।


0

আসল কমান্ডে কোনও পরিবর্তন বা সামঞ্জস্যের প্রয়োজন ছাড়াই এই অ্যাপ্রোচটি সহজতম থেকে জটিল পর্যন্ত যে কোনও পিএসকিএল কমান্ডের সাথে কাজ করবে

দ্রষ্টব্য: লিনাক্স সার্ভারগুলির জন্য।


  • আপনার আদেশের বিষয়বস্তু একটি ফাইলে সংরক্ষণ করুন

মডেল

read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]

HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd

EXAMPLE টি

read -r -d '' FILE_CONTENT << 'HEREDOC'
DO $f$
declare
    curid INT := 0;
    vdata BYTEA;
    badid VARCHAR;
    loc VARCHAR;
begin
FOR badid IN SELECT some_field FROM public.some_base LOOP
    begin
    select 'ctid - '||ctid||'pagenumber - '||(ctid::text::point) [0]::bigint
        into loc
        from public.some_base where some_field = badid;
        SELECT file||' '
        INTO vdata
        FROM public.some_base where some_field = badid;
    exception
        when others then
        raise notice 'Block/PageNumber - % ',loc;
            raise notice 'Corrupted id - % ', badid;
            --return;
    end;
end loop;
end;
$f$;

HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
  • কমান্ড চালান

মডেল

sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1

EXAMPLE টি

sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1

  • আপনার কমান্ড আউটপুট দেখুন / ট্র্যাক করুন

cat sqlop

সম্পন্ন! ধন্যবাদ! = D:


0

ডকারের জন্য পন্থা

পিএসকিএল কমান্ডের মাধ্যমে

 docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt

অথবা এসকিউএল ফাইল থেকে কোয়েরি

docker exec -i %containerid% psql -U %user% < file.sql > data.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.