私たちの誰もが、レポートを作成したりデータベースからデータを抽出したりして、それをスプレッドシートで表示しなければならない状況に置かれたことがあると確信しています。 多くの場合、当社の顧客はスプレッドシートやレポートを処理するために Excel を好みます。 データをコピーして貼り付けるのでしょうか。 あるいは、RDBMS GUI を使用して、スプレッドシートにレポートを生成しますか? 今日は、PostgreSQLの小さいながらも便利な機能であるCOPY.

Hello COPY#

COPYのドキュメントから引用します。 「COPYは、PostgreSQLのテーブルと標準ファイルシステムのファイル間でデータを移動します。 COPY TOはテーブルの内容をファイルにコピーし、COPY FROMはファイルからテーブルにデータをコピーします(テーブルに既にあるデータにデータを追加します)。

  1. ファイルの内容(データ)をテーブルにコピーしたり、
  2. テーブルの内容(またはSELECT問い合わせの結果)をファイルにコピーしたりすることができます。

列のリストが指定された場合、COPYは指定された列のデータのみをファイルへ、またはファイルからコピーします。

COPY with a file nameは、PostgreSQLサーバがファイルから直接読み込んだり、ファイルに書き込んだりすることを指示します。 ファイルはサーバからアクセス可能でなければならず、また、名前はサーバの視点から指定されなければなりません。 STDINまたはSTDOUTが指定された場合、データはクライアントとサーバ間の接続を介して送信されます。 試してみましょう!

免責事項: COPYは、CSVおよびバイナリファイルから/へのデータの読み取り/書き込みの機能を備えています。 バイナリファイルの使用例はたくさんあると思いますが、このブログでは、CSVファイルの使用例のみに焦点を当てます。

COPY TO#

SELECTクエリからCSVファイルを作成したり、テーブルの内容をすべてCSVファイルにダンプしたい場合、「COPY … TO …」コマンドを使用できます。

SELECTクエリを使用する#

結果セットをCSVファイルにコピーする場合、COPYコマンドの書式は次のようになります:

1
COPY (<select-query-here>) TO <file-path>;

あるいはもっと実際の例。

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv';

見てわかるように、結果をローカルファイルシステム上のCSVfileにコピーするCOPYコマンドを使用しています。 この問い合わせは、さらに多くのことを行うことができます。

1
COPY (SELECT price_rules.* FROM quotes LEFT JOIN price_rules ON quotes.id = price_rules.chargeable_id where quotes.id = 437) TO '~/Desktop/exports/price_rules.csv' CSV;

このように、データの結果セットを返せるあらゆるSELECTクエリを使用することが可能です。

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV HEADER;

最後にキーワード HEADER を追加すると、テーブル列名であるヘッダーを CSV ファイルに含めることができるようになりました。 CSVファイルにどのような文字のデリミタを入れたいかによって、コマンドで文字を指定することができます。

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV DELIMITER ',' HEADER;

テーブル名の使用#

テーブル全体をCSVにしたい場合、コマンドはとてもシンプルになります。

1
COPY people TO '~/Desktop/people.csv' CSV DELIMITER ',' HEADER;

それだけです。

COPY FROM#

さて、CSVファイルのデータをテーブルに注入したいときは、「COPY &mldr; FROM &mldr;」コマンドを使用します。 構文は非常に似ていますが、1つだけ違う点があります。

1
COPY <table-name> FROM <file-path> DELIMITER ',' CSV HEADER;

または実際の例を使って説明します。

1
COPY addresses FROM '~/Desktop/addresses.csv' DELIMITER ',' CSV HEADER;

アウトロー#

COPY は Postgre の本当にすてきでクールな機能です。 このブログの記事は、簡潔でシンプルにまとめました。 もし何かご意見やご質問があれば、お気軽にコメントください。

この記事を気に入っていただけましたか? この記事が気に入ったら、mynewsletterに登録し、私の新鮮な記事を受信してください。 毎月1,000人以上の購読者に配信しています。

コメントを残す

メールアドレスが公開されることはありません。