0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めに

Qiita Engineer Festa 2024に参加中。完走目指してます。
他のメタコマンドについては以下から読んでください。

\copyとは

フロントエンド(クライアント)コピーを行います。 これはCOPY SQLコマンドを実行する操作ですが、サーバで指定ファイルに対する読み込みまたは書き込みを行うのではなく、psqlがファイルの読み書きや、サーバとローカルファイルシステム間のデータ送信を行います。 この場合、ファイルへのアクセス権限はサーバではなくローカルユーザのものを使用するので、SQLのスーパーユーザ権限は必要ありません。

programが指定された場合、commandがpsqlにより実行され、commandから、または、commandへのデータはサーバとクライアント間を行き来します。 ここでも、実行権限はローカル側のユーザであり、サーバ側ではなく、SQLスーパーユーザ権限は必要とされません。

\copy ... from stdinでは、データ行は、コマンドの発行源と同じところから、\.を読み取るまで、あるいは、ストリームがEOFに達するまで読み続けます。 このオプションは、SQLスクリプトファイルの内部でテーブルにデータを投入する場合に便利です。 \copy ... to stdoutでは、出力はpsqlコマンドの出力と同じところに送られますが、COPY countコマンドのステータスは表示されません(これはデータ行と混同してしまうかもしれないからです)。 コマンドの入力元や\oオプションに関わらず、psqlの標準入力や標準出力を読み書きするには、from pstdinあるいはto pstdoutと書いてください。

このコマンドの構文はSQLのCOPYコマンドに似ています。 データの入力元と出力先以外のすべてのオプションはCOPYと同じです。 このため\copyメタコマンドには特別な解析規則が適用されていることに注意してください。 他のほとんどのメタコマンドとは異なり、行の残り部分の全体は常に\copyの引数として解釈され、引数内の変数の置換や逆引用符の展開は行われません。

\copyについて

試してみた

検証用のテーブルを作成しデータを投入する

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name TEXT,
    age INTEGER,
    department TEXT
);

INSERT INTO employees (name, age, department) VALUES
('John Doe', 30, 'HR'),
('Jane Smith', 25, 'IT'),
('Sam Brown', 35, 'Finance');

テーブルのデータをファイルにコピーする

postgres=# \copy employees TO 'employees.csv' WITH (FORMAT CSV, HEADER);
COPY 3

lessなどでファイルが作成されてデータもコピーされていることを確認する

一度テーブル内のデータを削除する

postgres=# delete from employees;
DELETE 3
postgres=# select * from employees;
 id | name | age | department 
----+------+-----+------------
(0 )

ファイルのデータをテーブルにコピーする

postgres=# \copy employees FROM 'employees.csv' WITH (FORMAT CSV, HEADER);
COPY 3

selectで確認

postgres=# select * from employees;
 id |    name    | age | department 
----+------------+-----+------------
  1 | John Doe   |  30 | HR
  2 | Jane Smith |  25 | IT
  3 | Sam Brown  |  35 | Finance
(3 )

まとめ

データのdumpファイルを見てみるとcopyコマンドが使われているのもあって大量データのインポート・エクスポートに対してはcopyコマンドの方が効率良さそうです。
これについては別途具体的になぜ効率的なのかは調べたいですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?