コピーコード> このために設計されていません。これはテーブル構造のデータを処理することを目的としているため、行と列を分割する何らかの方法がないと機能しません。
COPY FROM
の文字は常にいくつかあります 区切り文字として解釈され、 COPY TO
データ内でエスケープシーケンスが見つかった場合は、エスケープシーケンスを挿入します。一般的なファイルI/O機能を探している場合、これは適切ではありません。
実際、データベースサーバーは一般的なファイルI/O用に設計されていません。一つには、何でも サーバーのファイルシステムと直接対話する場合は、スーパーユーザーの役割が必要になります。可能であれば、通常どおりテーブルにクエリを実行し、クライアント側でファイルI/Oを処理する必要があります。
とはいえ、いくつかの選択肢があります:
- 組み込みの
pg_read_file()
関数、およびpg_file_write()
adminpack
から モジュールは、ファイルシステムへの最も直接的なインターフェイスを提供しますが、どちらもクラスターのデータディレクトリに制限されています(ユーザーが作成したランダムなファイルをそこに保存することはお勧めしません)。 -
lo_import()
およびlo_export()
私が知っている唯一の組み込み関数は、ファイルI / Oを直接処理し、サーバーのファイルシステムへの無制限のアクセスを持っています(ホストOSによって課せられた制約の範囲内で)が、ラージオブジェクトインターフェイスは特にユーザーフレンドリーではありません.... - Perlのような手続き型言語の信頼できないバリアントをインストールする場合(
plperlu
)またはPython(plpythonu
)、その言語のネイティブI/Oルーチンのラッパー関数を記述できます。 -
COPY TO PROGRAM
では達成できないことはあまりありません 十分に決心している場合は、COPY(SELECT 1)TO PROGRAM'mv
' pg_file_write()
の制限を回避する -ただし、これによりSQLと外部ツールの境界が多少あいまいになります(コードベースを継承する人は誰も感心しないでしょう...)。