クライアントアプリコンソールがあります。 SQLコマンド "copy from stdin"を実行し、クライアントSTDINからPostgresサーバーにデータを送信してテーブルを埋めたいのですが。 psqlclientがなくても、sqlcommandコピーだけで可能ですか?
毎回、他の投稿で誰かがそれについて尋ねたとき、人々はいつもpsqlclientを使うように言っていますが、私はそれを使いたくありません。
私はすでにgitのpsqlclientソースコードで検索しました。そこでは、libpq.dllの「PQputCopyData(conn、buf、linelen)」のようなメソッドを使用してストリームデータを処理しています。
そのため、SQLコマンドとクライアントデータパイプだけを使用してデータを渡すことができるかどうかを尋ねています。それが不可能な場合、このコマンド「FROM STDIN」の理由は何ですか?
確かにそれはTIASだけで可能です。
CREATE TABLE f ( id int );
その後
$ echo 1 | psql -d test -c 'COPY f FROM STDIN'
COPY 1
実際、\COPY
はすべて、その機能のラッパーにすぎません。 ドキュメントから、COPY
COPY
とpsql命令\copy
を混同しないでください。\copy
はCOPY FROM STDIN
またはCOPY TO STDOUT
を呼び出してから、psqlにアクセス可能なファイルにデータをフェッチ/保存しますクライアント。したがって、\ copyを使用すると、ファイルのアクセス可能性とアクセス権はサーバーではなくクライアントに依存します。だから、私が尋ねているのは、SQLコマンドとクライアントデータパイプだけを使用してデータを渡すことができる場合、それができない場合に、このコマンド "FROM STDIN"の理由は何ですか?
サーバーがローカルファイルへのファイルハンドルを開いて、そのファイルから直接読み取ることも可能だからです。したがって、2つのモードがあります。サーバーはファイルから読み取るか、サーバーはSTDIN
から読み取ります。 \copy
自体は、ソケットを介してデータをサーバーにパイプし、STDIN
から読み取るように指示します。