COPY
tidak dirancang untuk ini. Ini dimaksudkan untuk menangani data terstruktur tabel, sehingga tidak dapat bekerja tanpa beberapa cara untuk membagi baris dan kolom; akan selalu ada beberapa karakter yang COPY FROM
ditafsirkan sebagai pemisah, dan yang COPY TO
akan memasukkan beberapa urutan pelarian jika menemukannya di data Anda. Ini tidak bagus jika Anda mencari fasilitas I/O file umum.
Faktanya, server database tidak dirancang untuk I/O file umum. Untuk satu hal, apa saja yang berinteraksi langsung dengan sistem file server akan membutuhkan peran pengguna super. Jika memungkinkan, Anda hanya perlu menanyakan tabel seperti biasa, dan menangani file I/O di sisi klien.
Meskipun demikian, ada beberapa alternatif:
- Built
pg_read_file()
fungsi, danpg_file_write()
dariadminpack
modul, menyediakan antarmuka paling langsung ke sistem file, tetapi keduanya terbatas pada direktori data cluster (dan saya tidak akan merekomendasikan menyimpan file acak yang dibuat pengguna di sana). lo_import()
danlo_export()
adalah satu-satunya fungsi bawaan yang saya tahu yang berhubungan langsung dengan file I/O dan yang memiliki akses tidak terbatas ke sistem file server (dalam batasan yang diberlakukan oleh OS host), tetapi antarmuka Objek Besar tidak terlalu ramah pengguna ....- Jika Anda menginstal varian bahasa prosedural yang tidak tepercaya seperti Perl (
plperlu
) atau Python (plpythonu
), Anda dapat menulis fungsi pembungkus untuk rutinitas I/O asli bahasa tersebut. - Tidak banyak yang tidak dapat Anda capai melalui
COPY TO PROGRAM
jika Anda cukup bertekad - salah satunya, Anda dapatCOPY (SELECT 1) TO PROGRAM 'mv <source_file> <target_file>'
untuk mengatasi keterbatasanpg_file_write()
- meskipun ini agak mengaburkan batas antara SQL dan alat eksternal (dan siapa pun yang mewarisi basis kode Anda kemungkinan besar tidak akan terkesan...).