やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

Rustのトレイト(trait)に衝撃を受けた

トレイト(trait)すごい

「コンセプトから理解するRust」を読んで衝撃を受けました...。
トレイト(trait)は今まで自分が出会ったことがない概念です。

多くの言語ではinterfaceや基底クラスを作って「あなたはこの関数orメソッドを実装してください」というルールを定めることが出来ます。pythonであれば、以下のコードのように基底クラスを作成して、継承させることで実装が出来ます。

続きを読む

そもそも疑問に思うことがないという事実

心理的安全性の重要性について知る

日々の開発の中で、お互いに新機能に対して意見を言い合うことなどがあるかと思いますが、自分が所属するチームではなかなか、意見が出ずに意見交流が発生しないことが多々ありました。

これに対して自分の答えの1つとして、心理的安全性が確保されていないのではないかと思い「恐れのない組織――「心理的安全性」が学習・イノベーション・成長をもたらす」や「新 コーチングが人を活かす」という本を読みました。

www.okb-shelf.work

読書を通して、確かに心理的安全性は重要で確保されていないといけないと感じ、所属チームで雑談を積極的に取り入れたり、自分が答えを出さず質問・意見を求める、無知であるという取り組みを約1ヶ月ほど続けてきました。

1ヶ月前と比べて、他メンバーへの相槌や「なるほど」といった反応が生まれるようになりました。これに関しては「よしよし!」と思ったのですが、自分が求めているような意見の交流にまでは至りませんでした。

続きを読む

M1mac+homebrewでpostgresql.confがある場所

探してみるも見つからず

SQLの統計情報の記録の設定しようと思い、以下を参考にpostgresql.confを探してみるも見つからず...

stackoverflow.com

homebrewを使っているところは同じようだけど、どうやらOSが違う、いやM1macなのが原因かと思い調べているとやはりそうだった。

続きを読む

postgresqlにおけるテーブルスキャンの実行例

テーブルスキャン

postgresqlでは、テーブルスキャンに該当する演算子が5つあります。

  • Seq scan: インデックスを使用せず、全件を検索
  • Index scan: インデックスを使用してスキャン
  • Bitmap scan: ビットマップを使用してスキャン
  • Index only scan: 問い合わせがインデックスに含まれるカラムのみで完結する場合のスキャン
  • Tid scan: 検索条件がタプルID(ctid)のスキャン

以下より引用

www.slideshare.net

Seq scanというのはいわゆる、フルスキャンでテーブルの中身を全て確認する必要があるため、一般的には動作が遅くなります。その一方でインデックスを適切に設置することで、Index scanとなる場合やIndex only scan、ビットマップインデックスを設定していればBitmap scanが使用されます。

Tid scanはレコードが物理的に格納されている位置を識別するためのctidを使用した検索時に使用されるもので、使用頻度はかなり低いでしょう。またctidはデータの更新、削除によって変わるため、使用には慎重になる必要があります。

続きを読む

【SQL】結合によって結合元テーブルの行数が増えるケースについて

質問サイトを巡回中に発見

LEFT JOINを実行した際に、NULLの値を持つレコードが増えるケースについては認知していましたが、ただのJOINの時にもレコード数が増えることを経験しました。 SQLに詳しい方から見れば、当たり前でしょと思われるかもしれませんが、遭遇したのが初めて、例を見かけなかったので記事にしてみました。

続きを読む