DB関係

inner joinとouter join

ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita 上記リンクの記事を何度か読んだことがあるのですが、 そもそもinner joinやouter joinについてよくわかっていなかったため、「includesしとけば万能そう」という理解しかできておりませ…

本番環境のデータをステージングへ入れる

本番環境のデータをステージングへ入れる必要があり、方法を調べました。 実際には違うやり方の方が良いとの判断となり、この方法でステージングにデータを入れることはしなかったのですが、その方法について書いておきます! 方法 1.本番データをローカルへ…

SQL発行されまくるスクリプト

あるデータを取得する必要があり、コンソールでスクリプトを実行しておりました。 すると、AWS RDSのProcessor load が90%を超えているというアラートが何度も鳴ってしまいましたw OPさんにも心配をさせてしまいたした。 その時のスクリプトが以下です。 ids…

Date型のカラムの値が今日の日付より以前のレコードをとるのに苦戦した

発生した問題 Jobで以下のようにクライアントのidを取得している部分に対して、"今日の日付より以前の契約をしている"という条件も足したいと思いました。 client_ids = invoice_build.billing_closing_date.contracts.with_status(:actived).pluck(:client_…

postgresqlのセッションを切断

テストが実行できなくなってしまい、焦ることがありました。 ターミナル再起動しても相変わらずテストが実行されないままでした。 rake db:resetしようと試みてもエラーでリセットできませんでした。 しかし、ログをたどっていったところ、どうやらポスグレ…

ポスグレとGP Commanderを接続する

起こった問題 PG Commanderというポスグレを可視化してくれるアプリを使いたかったのですが、ある日突然、自動で接続してくれなくなってしまっておりました。 自分で各項目を入力し接続を試みたのですが、上手くいかず困っておりました。。。 解決法 Portを…

Heroku本番DBの内容をローカルに持ってくる

Herokuの本番DBの内容をローカルに持ってくる方法を教えていただきました!! これは便利!!と感動したくので書き留めておきます。 以下のように、 heroku pg:pull herokuのDB名 ローカルDB名 --app アプリ名 とすると取得できます。 $ heroku pg:pull hero…

テストDBだけリセットしたい(postgresql)

テストデータベースだけリセットしたい!と思うことがありました。 調べてみたところ、以下の手順でテストデータベースをリセットできるようでした! ①データベースをtestに切り替える $ bin/rails db:environment:set RAILS_ENV=test ②データベースを消す $…

rakeタスクを作る

menuテーブルが持っていたimageカラムの値を、menus_imagesテーブルのimageカラムに移すrakeタスクを作りました。 rakeタスクは初めて作ったので、手順を書き留めておきます。 タスクを生成する 以下のコマンドを打つと、タスクがlib/tasks配下に生成されま…

ransackを使った日付検索で指定した日付の前日までのデータしか取得できないのを修正

問題 ransackで oooo/oo/oo から xxxx/xx/xx までというふうに日付検索ができるようにしていたのですが、 そのままだと xxxx/xx/xx の部分の時間が00:00:00となってしまう事で、指定した日付の前日までのデータしか取得できませんでした。 2019-03-01から201…

includesしたのにN+1問題が回避できない

userモデルとtaskモデルに関して、1対多のアソシエーションを組んでおり、 以下のようにビューでeach構文の中でアソシエーションを使ってuserのtasksの数を表示させておりました。 app/views/admin/users/index.html.slim div.fontsize_midium.margintop_bi…

テストデータを大量に作ってベンチマークテストをする

テストデータでtitleカラムにindexを貼った時・貼ってない時の検索スピードを比較したいと思い、以下のようなコードを書いてみました。 spec/models/task_spec.rb require 'rails_helper'require 'benchmark'RSpec.describe Task, type: :model do describe …

postgresqlでDBが作れなかったのを解決(してもらった)

コミュニティ開発しているプロジェクトで、githubログインを実装してくださったプルリクを確認しようと思い、ローカルにプルリクの内容を持ってきて確認しようとしました。 そしたらpostgresqlでデータベースが作成できないエラーにぶつかりました。。。 そ…

またmysqlが入らないエラーが出た

以前OSをアップデートした時にも出現した、mysqlが入らないエラーが再度出現しました。 以下はエラー文です。 ~/p/r/banken_admin_blog (master|✚1…) [1] $ bundle install Your Gemfile lists the gem kaminari (>= 0) more than once. You should probably…

- (ハイフン)が名前についてるDB名の扱い

先ほど、データベースを消そうと以下のようなSQL文を実行したのですがうまくいきませんでした。 drop database error-10-mooovi3_development; 出力されたエラー文は以下です。 You have an error in your SQL syntax; check the manual that corresponds to…

ER図

ER図とは? ER図とは、Entity-Relationship Diagramの略で、テーブル同士の関係を視覚的に分かりやすく表した図です。 正規化が済んだエンティティ同士の関係を紐付ける作業を行います。 具体例 以下の図は、前回正規化を行ったエンティティをER図で表したも…

データベースの正規化

データベースの正規化とは 正規化とは、データの重複をなくして効率よくデータを扱うために、テーブルを分けて整理することです。 正規化を行うことで、データの追加・更新・削除によってデータの不整合や喪失が起きるのを防ぎ、メンテナンスの効率を高めま…

DB設計について

本日、あるサイトを見てそこからテーブル設計を予測してみようという試みをしたのですが、どのようにテーブルを分けるか・アソシエーションはどうなるか予測を立てることに苦戦しました。。。 そこで今回、データベース設計についてまとめてみようと思います…

ポリモーフィック関連2 (コールバックで関連テーブルへのレコード保存の設定とその時吐かれるSQL)

profyでは、ActiveRecordコールバックを利用して、questions、answersテーブルのレコードが作られたら、ポリモーフィック関連先のテーブルであるfeed_contentsテーブルにもレコードが保存されるようにしています。ここの仕組みが難しいと感じたので調べて記…

再・ポリモーフィック関連について

ポリモーフィック関連とは ポリモーフィック関連とは、ある1つのカラムが複数のテーブルを参照しているようなパターンの関連を表したものです。 同じようなカラムを持っているテーブルが複数ある場合、それらを1つのテーブルで管理してしまうことができま…

MacOSMojaveにアップデートしてbundle installしてもmysqlだけ入らなかったエラーの解決法(Rails5.2.1・Ruby2.5.1)

先日MacOSをMojave&Railsを5.2.1&Rubyを2.5.1にアップデートしました。 そしたらmysqlがbundle installできないエラーに見舞われました。 結構苦戦したので同じエラーが出た人のためになればと思い記事にしました。 エラー内容 rails new をして、bundle in…

N+1問題

N+1問題についてどういう時にどこで発生してしまうのか、includeメソッドを使うと何故解決できるのか今ひとつピンときていなかったので調べました。 N+1問題とは? レコードの数+1回SQLが発行されてしまう問題。 いつどこで起きるか? N+1問題は2つのモデ…

ポリモーフィック関連

ポリモーフィック関連とは ポリモーフィック関連とは、ある1つのカラムが複数のテーブルを参照しているようなパターンの関連を表したもの。同じようなカラムを持っているテーブルが複数ある場合、それらを1つのテーブルで管理してしまうことができる。複数…

多対多のアソシエーションについて

進捗報告 多対多の関係について復習しました。 理解した気になっていて理解しきれていないことがあったため、改めて知識の整理を行いました。 ■理解したもの 多対多の関係 多対多とは 多対多とは、データベースのテーブル同士の関係の1つ。 (他に1対1、1…