Solusi dalam jawaban yang diterima hanya akan berfungsi di server dan ketika pengguna yang menjalankan kueri akan memiliki izin untuk membaca file seperti yang dijelaskan dalam jawaban SO ini.
Jika tidak, pendekatan yang lebih fleksibel adalah mengganti COPY
. SQL perintah dengan psql
"meta-command" bernama \copy
yang mengambil semua opsi yang sama dengan COPY "asli", tetapi dijalankan di dalam klien (tanpa perlu ;
di akhir):
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"
Sesuai dengan dokumen, \copy
perintah:
Melakukan salinan frontend (klien). Ini adalah operasi yang menjalankan perintah SQL COPY, tetapi alih-alih server membaca atau menulis file yang ditentukan, psql membaca atau menulis file dan merutekan data antara server dan sistem file lokal. Ini berarti bahwa aksesibilitas dan hak istimewa file adalah milik pengguna lokal, bukan server, dan tidak diperlukan hak pengguna super SQL.
Selain itu, jika the_file.csv
berisi header di baris pertama, dapat dikenali dengan menambahkan header
di akhir perintah di atas:
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"