初めに
Qiita Engineer Festa 2024に参加中。完走目指してます。
他のメタコマンドについては以下から読んでください。
\iとは
filename
ファイルから入力を読み取り、キーボードから入力された場合と同じように実行します。
filename
が-
(ハイフン)の場合、EOFを示すもの、または\q
メタコマンドが読まれるまで標準入力から読み込みます。 これは対話的な入力とファイルからの入力を混在させるために使うことができます。 Readlineと同じ挙動は、それが最も外部のレベルで動作している場合にのみ利用されることに注意してください。
試してみた
以下のようなSQLのファイルを作成(仮にscript.sqlとする)
CREATE TABLE test (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO test (name) VALUES ('Alice'), ('Bob'), ('Carol');
psqlでセッションを開始した後に以下を実行する
\i script.sql
エラーなく完了したらselectで確認
select * from test;
id | name
----+-------
1 | Alice
2 | Bob
3 | Carol
(3 rows)
\i -
という使い方もある。
以下のように最後の行に追加してみる。
CREATE TABLE test (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO test (name) VALUES ('Alice'), ('Bob'), ('Carol');
\i -
-f
でファイルを実行する
psql -f script.sql
すると\i -
がなければpsqlセッションを終了するはずが、継続してSQLを入力、実行ができるようになる。
まとめ
\i
は複数のSQLを1アクションで実行することができるのでよく活用します。
\i -
について今回初めて知りましたが、すぐにSQLコマンドを実行したい時があれば活用できそう。実際に実務の中でもそんな場面があったようなないような気がします。