🐘

goとpostgresqlの連携

に公開

まず

こちらの記事は私が足りていないと思う所を重点的に勉強する。
名付けて「onion7日間チャレンジ」のDay1になります。
Day2↓

onion7日間チャレンジについて

Day1なので、詳しい説明も...
このチャレンジは7日で7個のプロダクトを作るというチャレンジです。
それに加えて以下のような制約もあります。

  • AIを使用してはならない
  • zennの記事を書くところまでやる
  • 一日15時間とし、日をまたいでも良し
  • ただし、15時間を超えたら失敗!!

作ったもの

Day1ではpostgresqlや連携の部分が足りていないと感じていたので、
CLIで動かせる日記を作成しました。

作ったものの概要

CLI日記(標準入力から操作)

""で囲まれてる部分は自分で変えて入力してください

  • 一行目(ユーザー)

    • "username"(ユーザー作成していない人は作成される)
    • delete "username"(ユーザーの削除)
  • 二行目(操作選択)

    • upsert(作成,更新)
    • show(取得)
    • delete(削除)
  • 三行以降(操作)

    • upsertの場合
      • "2004-09-04" "誕生日"(日付,内容)
      • 日付の更新はできません
    • showの場合
      • all(全て)
      • "2004-09-04"(日付で検索)
      • "誕生日"(内容で検索)
    • deleteの場合
      • "2004-09-04" (日付)

入力例

go run main.go
input UserOperation: onion0904
input operation: upsert
input date and content: 2025-05-30 徹夜した

学んだこと

postgresqlの起動方法

GUI

# imageのpull,containerのrun,初期設定
docker-compose.yml

http://localhost:8080にアクセスして、ログインする

ここでpostgresqlの操作ができます。

CLI

# imageのpull,containerのrun,初期設定
docker-compose.yml
# containerの状態を確認 
docker ps
# psのCONTAINER IDを確認して実行
docker exec -it [container id] psql -U onion0904 -d db

postgresqlの書き方

調べながら、すらすら書けるようになった

tableについての認識

create tableは設計図であり、userはゼロ人
insertでprimary keyが重なった時に複数のuserやdiaryが作成される

中間テーブルの意味

今回は一人のuserに複数のdiary,一つのdiaryに一人のuserだから一対多
中間テーブルが必要になる時は多対多の時
一つのdiaryに複数のtag,一つのtagに複数の日記の時などに使用


一対一

一対多

多対多

GitHubで編集を提案

Discussion