SQL

Active StorageのN+1問題を解決する

FBCのActive Storageを使ったユーザーアイコンの表示機能を実装しています。 Active Storageを使用した画像取得時にN+1問題が発生していると指摘を受けたので解決法を調べました。 結論 Active StorageのN+1問題はwith_attached_attachment_name スコープを…

SQLを生成するメソッドを呼ぶ順番は生成するSQLに影響しない

RailsでSQLを生成するメソッドの呼び出し順でSQLが変化するのか分からなかったのでコンソールで試して調べて見ました。 結論 SQLを生成するメソッドを呼ぶ順番は生成するSQLに影響しない。 下の2つのSQLは同一になる。 Book.all.order(:id) Book.order(:id).…

ヒアドキュメントでSQLを読み易くする

Sinatraを使ったメモアプリを開発中です。 rubyファイル内の長くて読みにくいSQLを読み易く記述する方法を調べました。 結論 ヒアドキュメントを使うと長いSQLの可読性が上がるかもしれません。 rubyファイル内のSQLは次のように書き換えることができます。 …

PostgreSQLのSQLインジェクションの対策

前回の記事ではPostgreSQLを使ったSinatraのメモアプリにSQLインジェクション攻撃ができることを確認したので、その対策について調べてみました。 環境 今回紹介するSQLインジェクションの対策は下記の環境で行いました。 DB: PostgreSQL フレームワーク: Si…

静的プレースホルダと動的プレースホルダの違い

静的プレースホルダと動的プレースホルダの違いが分からなかったので調べました。 結論 静的プレースホルダと動的プレースホルダは次のような違いがある。 静的プレースホルダ: SQL組み立てをDB側で行う 動的プレースホルダ: SQL組み立てをアプリ側で行う 他…

SQLインジェクションを試してみる

SinatraのDB版のメモアプリの終了条件に「SQLインジェクションへの対策」が含まれていたのでSQLインジェクションできるのか実際に試してみました。 SQLインジェクションとは? 引数などのパラメタにSQL文を混ぜ込んでおき(インジェクション),プログラム内…

SQLでCRUD処理を行う

SinatraのメモアプリをDB化するにあたってSQLでCRUD処理を行う必要が出てきました。 SQLコマンドでCRUD処理を行う方法について改めて整理しました。 結論 下記のSQLコマンドででCRUD処理ができる。 Create: INSERT Read: SELECT Update: UPDATE Delete: DELE…

PostgreSQLでDBとテーブルの作成と削除を行う

Sinatraで作成したメモアプリのDB化にあたりまずはPostgreSQLでのDBとテーブルの作成と削除する方法について調べた。 結論 psql でログインした状態で下記コマンドでDB/テーブルの作成/削除が行える。 DB作成: CREATE DATABASE DB名; DB削除: DROP DATABASE …

SQLの基礎

SQL

FBCのプラクティスであるSinatraで作成したメモアプリをDB化するにあたってSQLの基礎を復習しました。 SQLとは Structured Query Language リレーショナルデータベース(RDBMS)を操作する為の言語 標準SQL: ISO(国際標準化機構)で定められた標準規格を満たし…