Saya menggunakan psql \dt
untuk mendaftar semua tabel dalam database dan saya perlu menyimpan hasilnya.
Apa sintaks untuk mengekspor hasil perintah psql ke file?
postgresql
psql
pstanton
sumber
sumber
Jawaban:
Dari bantuan psql (
\?
):Urutan perintah akan terlihat seperti ini:
sumber
\o
lagi mematikannya.\?
tidak pergi ke file. :(\o queries-output.txt
redirect semua perintah berikut ke file bernamaqueries-output.txt
dan mengetikkan\o
(pada prompt psql lagi) mengembalikan perilaku pengalihan ini.\o
Perintah psql sudah dijelaskan oleh jhwist.Pendekatan alternatif menggunakan
COPY TO
perintah untuk menulis langsung ke file di server. Ini memiliki keuntungan bahwa itu dibuang dalam format yang mudah diurai pilihan Anda - daripada format tabulasi psql. Ini juga sangat mudah untuk diimpor ke tabel / database lain menggunakanCOPY FROM
.NB! Ini membutuhkan hak superuser dan akan menulis ke file di server .
Contoh:
COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
Membuat file CSV dengan ';' sebagai pemisah bidang.
Seperti biasa, lihat dokumentasi untuk detailnya
sumber
\copy
yang merupakan perintah postgres dapat bekerja untuk setiap pengguna. Tidak tahu apakah itu berfungsi untuk \ dt atau tidak, tetapi sintaksis umum direproduksi dari tautan berikut Sintaks penyalinan Postgres SQLDi atas akan menyimpan output dari kueri pemilihan dalam nama file yang disediakan sebagai file csv
EDIT:
Untuk server psql saya, perintah berikut berfungsi ini adalah versi yang lebih lama v8.5
sumber
Gunakan parameter o perintah pgsql.
sumber
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
perintah ini digunakan untuk menyimpan seluruh tabel sebagai csvsumber
Jika Anda mendapat kesalahan berikut
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.
Anda dapat menjalankannya dengan cara ini:
psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv
sumber
Gunakan kueri di bawah ini untuk menyimpan hasil dalam file csv
\ salin (kueri Anda) ke tajuk csv 'jalur file';
Contoh
\ copy (pilih nama, date_order dari purchase_order) ke tajuk cvs '/home/ankit/Desktop/result.csv';
Semoga ini bisa membantu Anda.
sumber
Saya berasumsi bahwa ada beberapa perintah psql internal untuk ini, tetapi Anda juga bisa menjalankan
script
perintah dari paket util-linux-ng :sumber
Pendekatan ini akan bekerja dengan perintah psql apa pun dari yang paling sederhana hingga yang paling rumit tanpa memerlukan perubahan atau penyesuaian apa pun dari perintah aslinya.
CATATAN: Untuk server Linux.
MODEL
CONTOH
MODEL
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
CONTOH
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
cat sqlop
Selesai! Terima kasih! = D
sumber
Pendekatan untuk buruh pelabuhan
melalui perintah psql
atau permintaan dari file sql
sumber