今回はPostgreSQLの学習として、Databaseの作成からSELECTまでを自分で実行しました。
途中で起きたエラーと修正も含めて、操作する場所、SQLの構文、取得したデータの意味を整理します。
所要時間は15分ほどです。
それでは、さっそく始めていきましょう!
今日のテーマと到達目標
今回はマスターカリキュラムのPhase これまで学んだことの確認テストです。到達目標は「DB作成からSELECTまで自力で実施する」です。
今回は練習用のDatabaseと商品Tableを作りました。
前提と用語の定義
| 用語 | 意味 |
|---|---|
| PostgreSQL | Databaseを管理するDBMS |
| Database | 接続先として指定し、SchemaやTableなどを管理する単位 |
| Schema | Database内でTableなどの名前を管理する名前空間 |
| Table | Columnの定義とRowのデータを持つDB Object |
| Column | Tableで名前とデータ型などが定義される列 |
| Row | 各Columnに対応する値の組 |
| SQL | Databaseの定義やデータ操作を記述する言語 |
| psql | PostgreSQLに接続して操作するクライアント |
| シェル | ターミナルでプログラムの起動などのコマンドを受け付けるプログラム |
| 識別子 | SQL内でTable名やColumn名などを指定する名前 |
| 文字列リテラル | SQLに直接記述する文字列の値 |
構造を整理する
今回のTable名はproductsです。1 Rowは商品1種類のデータを表します。
| Column | Data Type | 格納する値の意味 |
|---|---|---|
| product_id | INTEGER | 商品を識別するための番号 |
| product_name | TEXT | 商品名 |
| price_yen | INTEGER | 商品の価格。単位は円 |
product_idとprice_yenは同じ整数型ですが、商品の識別用の番号と価格という異なる役割を持ちます。今回はキーや制約を設定する課題ではありません。
また、シェルからpsqlを起動する操作と、psql内でSQLを実行する操作を区別します。
シェル
└── psqlを起動
└── PostgreSQLの指定Databaseへ接続
└── SQLを実行
PostgreSQLでの操作
以下は学習時に入力した操作を、読みやすく改行して整理したものです。
1. Databaseを作成する
接続済みのpsqlで実行しました。
CREATE DATABASE day14_practice;
実行結果は次のとおりでした。
CREATE DATABASE
2. 作成したDatabaseへ接続する
最初はpsql内にpsqlの起動コマンドを書いてしまいました。その後、次のメタコマンドでpsqlを終了しました。
\q
シェルに戻ってから、以下を実行しました。このパスは今回のMac環境のものです。
/opt/homebrew/opt/postgresql@17/bin/psql day14_practice
接続後のプロンプトは次の表示になりました。
day14_practice=#
3. Tableを作成する
CREATE TABLE products (
product_id INTEGER,
product_name TEXT,
price_yen INTEGER
);
実行結果です。
CREATE TABLE
4. Rowを追加する
修正後に成功したSQLは次のとおりです。
INSERT INTO products (product_id, product_name, price_yen)
VALUES (01, 'onigiri', 100);
実行結果です。
INSERT 0 1
末尾の1は追加したRowが1行であることを表します。
結果の確認
3つのColumnを指定して、追加したRowを取得しました。
SELECT product_id, product_name, price_yen
FROM products;
共有した実行画面には、次の結果が表示されました。
product_id | product_name | price_yen
------------+--------------+-----------
1 | onigiri | 100
(1 行)
product_idに入力した01は整数の1として表示されました。商品名はonigiri、価格は100円です。
今日の演習と確認問題
Database作成・接続・Table作成・Row追加・SELECTを実行した後、次の質問に回答しました。
| 確認問題 | 回答 |
|---|---|
| このTableの1 Rowは何を表すか | 1件の商品データ |
| product_idとprice_yenはそれぞれ何を表すか | product_idは商品ID、price_yenは商品価格 |
この演習での「1件の商品データ」は、商品1種類についてのデータです。価格の単位は円です。
理解したこと・間違えたこと
psqlの起動コマンドを入力する場所
psql内に起動コマンドを入力した後、\qで終了し、シェルから起動し直しました。
psql内で接続先を変更する方法として\c day14_practiceもあります。ただし、今回の実行画面で確認した接続方法は、シェルからの起動し直しです。
INSERTの構文
最初はINSERT ROW ...と書き、ROW付近の構文エラーになりました。対象Tableを指定するINSERT INTO productsと、値を指定するVALUESを使う形に修正しました。
文字列の引用符
次に、引用符を付けずにonigiriと書き、次のエラーになりました。
ERROR: column "onigiri" does not exist
引用符のないonigiriがColumn名として解釈されたためです。文字列リテラルの'onigiri'に修正して、追加できました。
合格条件と学習記録
この学習カリキュラムでは、到達目標を次の実技と説明で確認しました。
| 確認項目 | 確認できた根拠 |
|---|---|
| Databaseを作成して接続する | CREATE DATABASEの結果と接続後のプロンプト |
| 指定されたColumnでTableを作る | 入力SQLとCREATE TABLEの結果 |
| Rowを追加し、SELECTで取得する | INSERT 0 1と取得した1行の結果 |
| RowとColumnの意味を説明する | 商品データ・商品ID・商品価格についての回答 |
修正を経て全項目を確認できたため、学習側の判定をcompletedとしました。
まとめ
| 操作 | 使用したSQL・コマンド |
|---|---|
| Databaseを作成 | CREATE DATABASE |
| psqlを終了 | \q |
| シェルから接続 | psqlと接続先Database名を指定 |
| Tableを作成 | CREATE TABLE |
| Rowを追加 | INSERT INTO ... VALUES |
| Rowを取得 | SELECT ... FROM |
操作を実行する場所と、SQL内で指定する名前・値を区別しながら、Database作成からデータ取得までを実施できました。