やる気がストロングZERO

やる気のストロングスタイル

postgreSQL

重複Insertを防ぐ(postgreSQL)

例えばユーザー名の重複登録をNGとする場合、こんな感じでバリデーションと登録処理を書くことが多い。 ※疑似コードです begin name = "山田太郎" // dbからデータを取ってみて存在しないことを確認する user = getUserByName(name) if user != null { retur…

PostgreSQLでのトランザクション分離レベルの使い分けを考えた

標準としてのトランザクション分離レベルは一応把握してたけど、MySQLやPostgreSQLとか、実装によって結構事情が異なっててそのあたりあまり理解できてなかったのでPostgreSQLにおいてのトランザクション分離レベルを学び直した。 ※参考にしたのはこのあたり…

GROUP BYでまとめてそのLASTやFIRSTを取りたい場合のsqlの書き方(window関数を使う)

以下のような有効期間テーブルから、、 id ユーザーid 有効期間from 有効期間to 1 1 2020-6-1 2020-7-1 2 1 2020-7-1 2020-8-1 3 2 2020-5-1 2020-6-1 4 2 2020-6-1 2020-7-1 以下のようなデータ(ユーザー毎に最新の有効期間のレコード)を取得したい id ユ…

postgreSQLのtimestampはtimezone情報がないのでtimestamp with time zoneを使うのが良さそう

postgres のtimestampはタイムゾーンをもってない 。 だからデータを入れるとき、取得するときにタイムゾーンを気にしないといけない。 timestamp with time zoneで定義すべきかなと思う。 基本的にシステム内部で時間を扱うときは統一的にUTCで扱い、出力時…

【rails】dockerを使ってproductionでの確認ができる環境を構築する設定ファイル郡を作った

インフラ知識詳しくないので、とりあえず最低限動くところまで。 github.com これは何? railsの開発サーバーでの開発と、 dockerを使ってproduction環境での確認ができる環境を構築する設定ファイル郡 バージョン ruby 2.6.3 rails 6 構築方法 railsの新規…

psqlコマンド覚書

この続き) PostgreSQLのデータ移行(dumpとリストア) - やる気がストロングZERO 接続 psql -h [host] -U [username] [dbname] [(tablename)] db一覧表示 postgres=# ¥d use db postgres=# ¥c [dbname] table一覧表示 dbname=# ¥l table定義表示 dbname=# ¥l …

【PostgreSQL】 online alter tableを考える

Django migrationをオンラインで行えるのかどうか考えていた。 オンラインで行えるのかどうかはDjangoのmigrationコマンドの問題ではなく、使っているDB(今回の場合だとPostgreSQL)がどのようにロックを行うのかによるということがわかった。 では具体的に…

PostgreSQLのデータ移行(dumpとリストア)

参考) pg_dump データのdump pg_dump -h [hostname] -U [username] -c -t [tablename] -t [tablename] [dbname] > dump.sql -h: ホスト指定 -U:ユーザー名指定。未指定だとbashのログインユーザー名になるっぽい -c:テーブル削除文を追加 -a:データonly(-c…

トランザクション分離レベル Serializableでも同時実行でエラーがでる可能性がある

やりたかったこと IDが重複しないことを確認してから、DBにレコードを追加したかった。(IDの自動インクリメントは使わないものとする) ユニーク制約があるので、重複登録しようとしてもエラーになるのだが、 予めチェックしてエラーにならないようにしたか…