色々な RDBMS で SQL の書かれたファイルを読み込む方法について調べた。
まずはSQL の書かれたテキストファイルを用意しておく。
$ cat << 'EOF' > sample.sql DROP TABLE IF EXISTS users; CREATE TABLE users ( id integer, name varchar(255), age integer ); INSERT INTO users VALUES (1, 'Alice', 20), (2, 'Bob', 30), (3, 'Carol', 40); EOF
こんな感じ。
users
テーブルを作って、そこにレコードを追加している。
$ cat sample.sql DROP TABLE IF EXISTS users; CREATE TABLE users ( id integer, name varchar(255), age integer ); INSERT INTO users VALUES (1, 'Alice', 20), (2, 'Bob', 30), (3, 'Carol', 40);
TL;DR
早見表
RDBMS | コマンドライン | インタラクティブシェル |
---|---|---|
MySQL | mysql -D [database] < [filepath] | source [filepath] |
PostgreSQL | psql -d [database] -f [filepath] | \i [filepath] |
SQLite3 | sqlite3 [database] < [filepath] | .read [filepath] |
MySQL
まずは MySQL から。 使ったバージョンは次の通り。
$ mysqld --version mysqld Ver 5.7.18 for osx10.12 on x86_64 (Homebrew)
最初に、読み込む先となる sample
データベースを用意しておく。
$ mysql -u root -e "CREATE DATABASE IF NOT EXISTS sample"
コマンドラインから読み込む
まずは通常のシェルから mysql
コマンドを使って読み込む方法について。
mysql
コマンドを使って読みこむにはリダイレクトを使うだけで良い。
$ mysql -u root -D sample < sample.sql
これだけでテーブルができてレコードが追加されている。
$ mysql -u root -D sample -e "SELECT * FROM users" +------+-------+------+ | id | name | age | +------+-------+------+ | 1 | Alice | 20 | | 2 | Bob | 30 | | 3 | Carol | 40 | +------+-------+------+
シェルから読み込む
次に mysql
コマンドのインタラクティブシェルに落ちて読み込む方法について。
$ mysql -u root -D sample
ひとまず、先ほど読み込んだ内容は一旦削除しておく。
mysql> DROP TABLE users;
mysql
コマンドのシェルから SQL の書かれたファイルを読み込むには source
コマンドを使う。
mysql> source sample.sql
これでファイルに書かれた SQL が読み込まれる。
mysql> SELECT * FROM users; +------+-------+------+ | id | name | age | +------+-------+------+ | 1 | Alice | 20 | | 2 | Bob | 30 | | 3 | Carol | 40 | +------+-------+------+ 3 rows in set (0.00 sec)
あるいは上記の代わりに \.
を使っても構わない。
mysql> \. sample.sql
PostgreSQL
次に PostgreSQL の場合。 使ったバージョンは次の通り。
$ psql --version psql (PostgreSQL) 9.6.3
まずは読み込む先のデータベースを用意しておく。
$ psql -c "DROP DATABASE sample" $ psql -c "CREATE DATABASE sample"
コマンドラインから読み込む
psql
コマンドで読み込む場合には、読ませたいファイルを -f
オプションで指定する。
$ psql -d sample -f sample.sql
これで内容が読み込まれた。
$ psql -d sample -c "SELECT * FROM users" id | name | age ----+-------+----- 1 | Alice | 20 2 | Bob | 30 3 | Carol | 40 (3 rows)
シェルから読み込む
次は psql
コマンドのシェルに入って読み込む方法について。
まずはデータベースを指定してインタラクティブシェルに落ちる。
$ psql -d sample
先ほど作ったテーブルは一旦削除しておこう。
sample=# DROP TABLE users;
SQL の書かれたファイルを読み込むには \i
を使う。
sample=# \i sample.sql
これで内容が読み込まれた。
sample=# SELECT * FROM users; id | name | age ----+-------+----- 1 | Alice | 20 2 | Bob | 30 3 | Carol | 40 (3 rows)
SQLite3
次は SQLite3 の場合。 使ったバージョンは次の通り。
$ sqlite3 --version 3.16.0 2016-11-04 19:09:39 0e5ffd9123d6d2d2b8f3701e8a73cc98a3a7ff5f
コマンドラインから読み込む
SQLite3 でコマンドラインから読み込むにはデータベースのファイルを指定しながら MySQL と同様にリダイレクトを使うだけで良い。
$ sqlite3 sample.db < sample.sql
これで読み込まれた。
$ sqlite3 sample.db "SELECT * FROM users" 1|Alice|20 2|Bob|30 3|Carol|40
シェルから読み込む
次にインタラクティブシェルから読み込む方法について。
まずはデータベースのファイルを指定して sqlite3
コマンドを実行することでシェルに落ちる。
$ sqlite3 sample.db
先ほど作ったテーブルは一旦削除しておこう。
sqlite> DROP TABLE users;
SQLite3 のシェルでファイルを読み込むには .read
を使う。
sqlite> .read sample.sql
これで内容が読み込まれた。
sqlite> SELECT * FROM users; 1|Alice|20 2|Bob|30 3|Carol|40
いじょう。

- 作者:もみじあめ
- 発売日: 2020/02/29
- メディア: Kindle版