ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

PostgreSQLにテーブルをつくる

前回データベースをつくったので今回はその中にテーブルをつくる。

目次


テーブル

リレーショナルデータベースのテーブルには列と行がある。
列のことをカラムやフィールドと呼んだり、行をレコードと呼んだりする。
このブログでは列をカラム、行をレコードと書く。

カラムには名前をつける。例えばボートレース(レガッタ)の結果を管理するカラムの概念は次のようになる。
カラムの概念の例

レースナンバー, 種目, 組別, 順位, クルー名, ゴールタイム, 備考  


この各カラムにレース結果が入り、1件の集合となったものがレコード。
レコードの例

1, 男子エイト, 予選A組, 1, Aボートクラブ, 5:50.01, 準決勝進出


リレーショナルデータベースの概念についてはPostgreSQLのドキュメントに書かれている。

PostgreSQLドキュメント
https://www.postgresql.jp/document/10/html/tutorial-concepts.html

カラム定義

テーブルをつくるときにカラムに名前をつける。
またカラムごとに定義づけを行う。
定義の種類にはデータ型と制約がある。

データ型

データ型には数値や文字列などがある。
PostgreSQLドキュメントに詳細が載っている。

PostgreSQL データ型
https://www.postgresql.jp/document/10/html/datatype.html

制約

制約には必須項目かどうかや一意性かどうかなどがある。
制約はなくてもかまわない。
PostgreSQLドキュメントに詳細が載っている。

PostgreSQL 制約
https://www.postgresql.jp/document/10/html/ddl-constraints.html

テーブルをつくる

データベースに接続する

テーブルはデータベース内につくるので、データベースに接続している必要がある。
テーブルを操作するときはつねにデータベースに接続していることが前提。
今回は前回つくったtestデータベースに接続する。

まずはPostgreSQLサーバーを起動しておく。
起動方法はインストール時の記事を参照。

サーバー起動後、データベースに接続する。
接続するにはpsqlコマンドを使う。
Windows10版

psql -U postgres test


macOS10版

psql test


Uオプションの有無については前回の記事を参照。
接続すると次のような画面になる。
Windows10版

psql (10.3)
"help" でヘルプを表示します。

test=#


macOS10版

psql (10.3)
Type "help" for help.

test=#


データベース名=#がデータベースとの接続状態をあらわす。
この状態になったらSQL文で操作をする。
SQL文についてはPostgreSQLドキュメントに詳細が載っている。

PostgreSQLドキュメント
https://www.postgresql.jp/document/10/html/index.html

テーブルをつくる

テーブルをつくるにはcreate tableを使う。
形式は次のとおり。

create table テーブル名 (カラム名 データ型 制約);


カラム名から制約までを1まとまりとして、カンマでつなぐことで同時に複数のカラムをつくることができる。

実際にtestsという名のテーブルをつくってみる。
テーブル名はデータベース名の複数形にするとRubyから扱うときに便利になるのでデータベース名 + sとする。

テーブルをつくるSQL
(入力の際、見やすくするため改行を入れてもエラーにならない)

create table tests (
rank     int,
event    varchar(20),
crew     text,
goaltime text);


次のように返ってくれば作成は成功。

CREATE TABLE


コマンドの説明。

  • create table tests
    • testsという名のテーブルをつくる
  • ( rank int,
    • カラム名rank
    • データ型intは整数
    • 以下カンマでつないで複数のカラムをつくる
  • event varchar(20),
    • カラム名event
    • データ型varchar(20)は20文字までの文字列
  • crew text,
    • カラム名crew
    • データ型textは文字数制限なしの文字列
  • goaltime text);
  • 最後のセミコロンは必須
  • 今回はどのカラムにも制約はつけていない


テーブルの確認

テーブル一覧を表示する

テーブルの一覧表示は\dtをつかう。

\dt


実行すると次のように返ってくる。
Windows10版

f:id:rowingfan:20180418090628p:plain

macOS10版

f:id:rowingfan:20180418090701p:plain

テーブルの定義を確認する

テーブルの定義は\d テーブル名で確認できる。

\d tests


返答
Windows10版

f:id:rowingfan:20180418092234p:plain

macOS10版
f:id:rowingfan:20180418090732p:plain

テーブルの削除

テーブルを削除するにはdrop table テーブル名;をつかう。
試しにさきほどつくったtestsテーブルを削除する。

drop table tests;


次のように返ってくれば削除は成功。

DROP TABLE


削除されたかどうかテーブル一覧で確認してみる。
テーブルが1つもない状態で\dtをつかうと次のように返ってくる。
Windows10版

リレーションが見つかりませんでした。


macOS10版

Did not find any relations.


データベースを切断する

データベースを切断するには\qをつかう。

\q


これでデータベースと切断される。
作業が終わったらPostgreSQLサーバーを停止して終了。

次回はテーブルにデータを挿入します。


今回の動作確認環境
macOS 10.13.3
ターミナル 2.8.2
Windows10 1709
Windows PowerShell 5.1.16299.251
PostgreSQL 10.3