0から分かるPostgreSQL

PostgreSQL のインストールが完了したら、データベース（DB）を作成する手順を説明します！  
初心者でもわかりやすいように、順を追って解説しますね。  

---

## **1. PostgreSQL を起動する**
まず、PostgreSQL のサーバーを起動する必要があります。  
以下のコマンドを実行してください。  

```sh
brew services start postgresql
```
> ✅ **ポイント**: `brew services start` を使うと、Mac を再起動しても PostgreSQL が自動で起動します。

動作を確認するには、以下のコマンドを使います。  

```sh
pg_ctl -D /usr/local/var/postgres status
```
**出力例（正常時）:**
```
pg_ctl: server is running
```
**エラーが出た場合**は、以下を試してください。  
```sh
pg_ctl -D /usr/local/var/postgres start
```

---

## **2. PostgreSQL に接続する**
PostgreSQL には、デフォルトで `postgres` という管理ユーザーがいます。  
このユーザーで PostgreSQL に接続します。  

```sh
psql postgres
```

成功すると、以下のような `psql` の対話モード（シェル）が開きます。  

```
psql (14.3)
Type "help" for help.

postgres=#
```

もし `psql: command not found` というエラーが出たら、以下を試してください。  
```sh
export PATH="/usr/local/opt/postgresql/bin:$PATH"
```

---

## **3. 新しいデータベースを作成する**
`psql` のシェルで、以下のコマンドを実行します。  

```sql
CREATE DATABASE mydb;
```
> ✅ **ポイント**: `mydb` の部分は好きな名前に変更できます。  

データベースが作成されたか確認するには、以下を実行します。  

```sql
\l
```
データベースの一覧が表示され、その中に `mydb` があれば成功です！  

---

## **4. データベースに接続する**
作成したデータベースに接続するには、以下を実行します。  

```sh
psql mydb
```
または、`psql` のシェル内で  
```sql
\c mydb
```
と入力しても OK です。

成功すると、プロンプトが以下のように変わります。  

```
You are now connected to database "mydb" as user "postgres".
mydb=#
```

---

## **5. テーブルを作成する**
データを保存するには「テーブル」を作成する必要があります。  
例えば、「users」というテーブルを作るには以下の SQL を実行します。  

```sql
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    age INT
);
```
> ✅ **解説**
> - `id SERIAL PRIMARY KEY` → 自動で連番を振る主キー  
> - `name TEXT NOT NULL` → 名前（必須）  
> - `age INT` → 年齢（整数）

作成したテーブルを確認するには以下を実行します。  

```sql
\d
```
または  
```sql
\d users
```
で `users` テーブルの詳細を表示できます。

---

## **6. データを追加する**
テーブルにデータを追加してみましょう。  

```sql
INSERT INTO users (name, age) VALUES ('Taro', 25);
INSERT INTO users (name, age) VALUES ('Hanako', 30);
```

データが追加されたか確認するには、以下を実行します。  

```sql
SELECT * FROM users;
```
> ✅ **ポイント**: SQL のコマンドは `;` を忘れないようにしましょう！

実行すると、以下のように表示されるはずです。  

```
 id |  name  | age
----+--------+-----
  1 | Taro   |  25
  2 | Hanako |  30
(2 rows)
```

---

## **7. PostgreSQL を終了する**
作業が終わったら、`psql` を終了しましょう。  

```sql
\q
```
これで `psql` のシェルを抜けられます。

もし PostgreSQL のサーバーを停止したい場合は、以下を実行してください。  
```sh
brew services stop postgresql
```

---

## **まとめ**
1. **PostgreSQL を起動**  
   ```sh
   brew services start postgresql
   ```
2. **PostgreSQL に接続**  
   ```sh
   psql postgres
   ```
3. **データベースを作成**  
   ```sql
   CREATE DATABASE mydb;
   ```
4. **データベースに接続**  
   ```sh
   psql mydb
   ```
5. **テーブルを作成**  
   ```sql
   CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT NOT NULL, age INT);
   ```
6. **データを追加**  
   ```sql
   INSERT INTO users (name, age) VALUES ('Taro', 25);
   ```
7. **データを確認**  
   ```sql
   SELECT * FROM users;
   ```
8. **終了**  
   ```sql
   \q
   ```

**DBの確認**

以下のコマンドを入力して、作成したデータベース `mydb` があるか確認してみてください。  

```sql
\l
```

もし `mydb` が一覧に表示されれば、データベースの作成は成功しています 🎉  
一覧に `mydb` がない場合は、もう一度 `CREATE DATABASE mydb;` を実行してみてください。  

---

### **💡 psql コマンドの注意点**
- **`\l`** → **データベースの一覧を表示**（`/l` ではなく `\l`）
- **`\c mydb`** → **データベースに接続**
- **`\q`** → **psql を終了**



`postgres-#` と `mydb=#` の違いをわかりやすく説明します！  

---

## **① `postgres=#` と `mydb=#` の違い**  
PostgreSQL のプロンプト（コマンド入力画面）の **"最初の部分"** は、**現在接続しているデータベースの名前** を表しています。  

| プロンプト | 説明 |
|------------|----------------|
| `postgres=#` | **`postgres` データベースに接続している状態** |
| `mydb=#` | **`mydb` データベースに接続している状態** |

例えば、以下のように `\c mydb` を実行すると、プロンプトが `mydb=#` に変わります。  
```sql
\c mydb
```
```
You are now connected to database "mydb" as user "postgres".
mydb=#
```
これは、**今 `mydb` というデータベースの中にいる** ことを示しています！ 🎉  

---

## **② `postgres-#` になるのはなぜ？**
`postgres-#` という表示は **SQL コマンドの入力が途中になっている状態** です。  

例えば、以下のように `SELECT` 文を途中まで書いて `;`（セミコロン）を付け忘れると…  

```sql
SELECT * FROM users
```
```
postgres-#
```
となります。  

これは、**まだ SQL 文が完結していない** ので、次の行で続きを入力するのを待っている状態です。  
ここで `;` を追加すると、実行されます。  

```sql
SELECT * FROM users;
```
```
 id |  name  | age
----+--------+-----
  1 | Taro   |  25
  2 | Hanako |  30
(2 rows)
postgres=#
```
プロンプトが `postgres=#` に戻ったら、**通常の入力待ち状態** に戻っています！  

---

## **③ `postgres-#` から抜ける方法**
もし **SQL 文を途中でやめたい** 場合は、以下のキーを押してください。  

```
Ctrl + C
```
これで **未完成のコマンドをキャンセル** し、通常の `postgres=#` に戻ります！  

---

## **まとめ**
🔹 **`postgres=#`** → `postgres` データベースに接続している状態  
🔹 **`mydb=#`** → `mydb` データベースに接続している状態  
🔹 **`postgres-#`** → **SQL コマンドの入力が途中の状態**（`;` を忘れている）  
🔹 **`Ctrl + C`** で `postgres-#` の状態を抜ける  

---

### **次に試してみること**
1️⃣ `\c mydb` を実行して、`mydb=#` に切り替えてみる  
2️⃣ `SELECT * FROM users` だけ入力して `Enter` を押し、`postgres-#` になるか試す  
3️⃣ `Ctrl + C` を押して通常のプロンプトに戻す