PostgreSQLにデータを挿入する
前回テーブルのつくりかたを試したので、今回はテーブルにデータを挿入する。
目次
- 外部ファイルの読み込み
- SQLファイルをつくる
- ファイルを読み込む
- テーブルにデータを挿入する
- Windows10とPostgreSQLの文字エンコーディング
- SQL言語 select文
- 表示の文字化け
- 拡張表示
外部ファイルの読み込み
前回、テーブルを削除したので再度テーブルをつくりなおす。
その際、ターミナル/PowerShellからSQL文を入力するのではなくSQLファイルをつくり、それを読み込む方法をとる。
その方が長いSQL文のときは便利。
SQLファイルをつくる
ここではボートレース(レガッタ)の結果を収録する想定でテーブルをつくる。
カラムは次のようにする。
レースno, 種目, 組別
1位, 1位のクルー名
2位, 2位のクルー名
3位, 3位のクルー名
4位, 4位のクルー名
5位, 5位のクルー名
6位, 6位のクルー名
create文のファイルをつくる。
create_tests.sql
create table tests ( raceno int primary key, events varchar(16) not null, groups varchar(6), rank1 int, crew_rank1 text, rank2 int, crew_rank2 text, rank3 int, crew_rank3 text, rank4 int, crew_rank4 text, rank5 int, crew_rank5 text, rank6 int, crew_rank6 text );
上のカラム定義について。
- racenoにprimary key制約をつけた
- primary keyはテーブル内に1つしか設定できない
- primary keyは必須と一意性の両方をもつ制約
- eventsにnot null制約をつけた
- not null制約は必須項目という意味
ファイルを読み込む
まずはPostgreSQLサーバーを起動する。
サーバー起動と停止の仕方は以前の記事を参照。
Windows10にPostgreSQLをインストールする - ローイングファンの日記
macOS10にPostgreSQLをインストールする - ローイングファンの日記
起動したらtestデータベースに接続する。
接続と切断の仕方は以前の記事を参照。
PostgreSQLにテーブルをつくる - ローイングファンの日記
ファイルを読み込む書式は次のとおり。
\i ファイル名
実際に試してみる。
\i create_tests.sql
次のように返ってくればファイルをもとにテーブルが作成されている。
CREATE TABLE
どのようなテーブルができたか確認する。
\d tests
返答
Windows10
macOS10
\d テーブル名
でカラム名、データ型、制約が確認できる。
表の最後にあるIndexes:
について。
- primary key制約をつけたカラムはインデックスになる
- インデックスになっているカラムは検索のときに高速なるなどの特徴がある
インデックスについての詳細はPostgreSQLドキュメントに載っている。
PostgreSQLドキュメント SQL言語 11章.インデックス
https://www.postgresql.jp/document/10/html/indexes.html
テーブルにデータを挿入する
先ほどつくったテーブルにデータを挿入する。
データを挿入するにはinsert文を使う。書式は次のとおり。
insert into テーブル名 (カラム名1, カラム名2, .....) values (値1, 値2, ...);
値のカッコをカンマでつなぐと同時に複数のレコードを挿入できる。
実際にファイルをつくって試してみる。
今回は3位までの結果を2レース(レコード)分挿入する。
insert_tests.sql
insert into tests ( raceno, events, groups, rank1, crew_rank1, rank2, crew_rank2, rank3, crew_rank3) values ( 1, '男子エイト', '予選A組', 1, 'A大学', 2, 'B大学', 3, 'Cクラブ' ), ( 2, '男子エイト', '予選B組', 1, 'D大学', 2, 'E大学', 3, 'Fクラブ' );
文字列は' '
シングルクォートで囲む必要がある。
上のファイルをデータベースに読み込む。
\i insert_tests.sql
次のように返ってくれば挿入成功。
INSERT 0 2
Windows10とPostgreSQLの文字エンコーディング
Windows PowerShellから挿入するとき、次のようなエラーになる場合がある。
ERROR: invalid byte sequence for encoding "SJIS": 0x88 0x27
PowerShellとPostgreSQLの文字エンコーディングの違いなので次のように設定を変更する。
\encoding utf-8
変更した設定を確認する。
\endoding
返答。
UTF8
上のように文字エンコーディングがUTF-8に変更できていればデータを挿入できる。
SQL言語 select文
先ほど挿入したデータを確認する。
データを検索するにはselect文を使う。
書式は次のとおり。
select カラム名 from テーブル名 条件;
実際に試してみる。
select * from tests;
上のselect文の説明。
*
は全ての意味。今回は全てのカラム- testsテーブルから検索
- 条件はないので全てのレコードが表示される
結果
windows10
macOS10
表示の文字化け
Windows PowerShellの場合、表示するときに文字化けをおこすことがある。
正しく表示するため文字エンコーディングを変更する。
今回の場合、データを挿入するときに変更した文字エンコーディングをUTF-8からSJISに戻す。
\encoding SJIS
確認する。
\encoding
返答。
これで正しく表示される。
拡張表示
カラム数が多いと横長になりすぎて画面におさまらず見づらい。そのようなときは縦表示にする拡張表示機能がある。
拡張表示設定
\x
返答 Windows10
拡張表示は on です。
macOS10
Expanded display is on.
拡張表示がオンの状態でテーブルを表示すると次のようになる。
select * from tests;
返答
拡張表示をオフにしたいときはもう一度\x
を入力する。
\x
返答
Windows10
拡張表示は off です。
macOS10
Expanded display is off.
作業が終わったらデータベースを切断。
PostgreSQLサーバーを停止。
次回はselect文のwhere句を試します。
今回の動作確認環境
macOS 10.13.3
ターミナル 2.8.2
Windows10 1709
Windows PowerShell 5.1.16299.251
PostgreSQL 10.3