メディア統括本部 サービスリライアビリティグループ(SRG)の鬼海雄太(@fat47)です。 #SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。 本記事は、MySQ
複数の DDL ファイルを外部キー依存順に並べて結合するツール、 sqlstitch を作ったFebruary 24, 2024SQLRustsqlstitchGitHub Copilot スキーマ定義をテーブル毎にファイル分割したい、でもなにも考えずに結合するとそのまま流せなくない? を解決するツール 目次 レポジトリ https://github.com/yshrsmz/sqlstitch これはなに 端的にいうと、スキーマ定義用の DDL を複数ファイルに分割して管理しているときに、関連順に並び替えて結合してくれるツール。 スキーマが大きくなってくると、メンテナンス性維持のためにたとえば CREATE TABLE 単位でファイルを分割したくなる。ただ、ファイルを分割すると今度は実行順序を気にする必要がでてくる。単純に cat するとファイル名順で結合されるので、外部キー制約的に無
はじめに みなさんはDBのインデックスを正しく使えていますか? 私はなんとなく「DBのパフォーマンスを向上するためのもの」という認識はあったのですが、 どのような場面で使うものなのか、逆にどのような場面では使うべきでないのかなど 明確に理解できていませんでした。 今回はそんなインデックスについての理解を深めたいと思います。 インデックスとは インデックスとは、その名の通り「索引」です。 表現の仕方と変えると、(x, a)という形式の配列であるとも言えます。 xというキー値とそれに結びつくaというデータ情報があり、 これを利用することですべてのデータを網羅して見ることなく、 まさに本の索引のように目的のデータにたどり着くことができます。 インデックスはSQLのパフォーマンスを改善するための非常にポピュラーな手段であり、 理由としては下記の3点が挙げられます。 アプリケーションのコードに影響を
「SQLスキル」を試してみませんか? TOPSIC SQL CONTEST は、SQLスキルを競うコンテストサイトです。 TOPSIC SQL CONTESTは、誰でも参加できるオンラインコンテストです。 コンテスト時間内に出題された問題に対する解答(SQL文)を作成し、提出していく形式になります。世の中にプログラミングスキルを競うコンテストはたくさんありますが、SQLスキルを競うコンテストはほとんどなく、自分がどのくらいの水準なのかを客観的に把握することが困難でした。「TOPSIC SQL CONTEST」はお気軽にご参加いただくことができ、コンテストの順位により自分の実力を知り、スキルアップのモチベーションを得られる機会となります。多くの方々に楽しみながら、ご参加いただけるコンテストを目指していきます。ぜひみなさんご参加ください! 開催スケジュール 第12回 TOPSIC SQL CO
こんにちは、ヌーラボの中村です。BacklogのGitチームで開発やメンテナンス、その他諸々をやっています。本記事ではMySQLクライアントのバージョンアップの際に出くわしたおもしろい挙動を解説します。 概要 MySQL 5.7サーバーへの接続について、MySQL5系クライアントからMySQL8系クライアントへのバージョンアップを検証していたところ、特定のクエリだけ実行結果が0件になる現象が発生しました。(あるPerlのプログラムで5系のクライアントをサポートしていない環境があり、やむを得ずアップグレードを実施しました) インターネットで検索すると、「クエリに空白を入れる」「改行を追加する」などおまじないのような解決方法が散見されましたが、そんなはずはないと思い調査を進めました。 調査したところ、原因は以下の3つが合わさったことによるものでした。 MySQL 5.7ではクエリキャッシュが有
SQL-92 以前では、選択リスト、HAVING 条件または ORDER BY リストが GROUP BY 句で指定されていない非集計カラムを参照するクエリーは許可されません。 たとえば、このクエリーは、選択リストの非集計 name カラムが GROUP BY に表示されないため、標準 SQL-92 では無効です: SELECT o.custid, c.name, MAX(o.payment) FROM orders AS o, customers AS c WHERE o.custid = c.custid GROUP BY o.custid; クエリーを SQL-92 で有効にするには、選択リストから name カラムを省略するか、GROUP BY 句で名前を指定する必要があります。 SQL:1999 以降では、GROUP BY カラムに機能的に依存している場合、オプション機能 T30
ORDER BY と組み合わされた DISTINCT では多くの場合に一時テーブルが必要です。 DISTINCT では GROUP BY を使用できるため、MySQL が ORDER BY または HAVING 句内の選択したカラムの部分でないカラムをどのように処理するかを学んでください。 セクション12.20.3「MySQL での GROUP BY の処理」を参照してください。 ほとんどの場合、DISTINCT 句は GROUP BY の特殊な例と考えることができます。 たとえば、次の 2 つのクエリーは同等です。 SELECT DISTINCT c1, c2, c3 FROM t1 WHERE c1 > const; SELECT c1, c2, c3 FROM t1 WHERE c1 > const GROUP BY c1, c2, c3; この同等性のため、GROUP BY クエリ
DISTINCTとORDER BYのセットでエラーが出力 DBのバージョンをあまり意識せずに構築した結果、 プログラムの一部が動かなくなってしまった。 apacheのエラーファイルに吐き出された内容は以下。 ERROR 3065 (HY000): Expression #1 of ORDER BY clause is not in SELECT list, references column 'DB名.テーブル名.カラム名' which is not in SELECT list; this is incompatible with DISTINCT 引き継いだプログラムのため、詳細は不明だけど 対象のSQLを確認したところ、確かに若干おかしいところはある。 カラムが合わないDISTINCTして、ORDER BYしてという。。 しかし既存サーバーでは稼働しているのと、プログラムに手を入れる
semijoinフラグがONの場合は、それに関連するduplicateweedoutフラグ、firstmatchフラグ、materializationフラグ、およびloosescanフラグの制御が可能となります。 準結合(セミジョイン) セミジョインはOracle Databaseを使用したことある方にはおなじみの動作ですが、MySQL5.6で追加されました。semijoinフラグをONにすることで、WHERE句またはON句内にINを使用したサブクエリに対してセミジョインが行われます。セミジョインとはサブクエリ内のテーブルの重複レコードを取り除き、結合と同じような動きをします。 しかし、このセミジョインが動作するにはいくつかの条件があるため注意が必要です。 INまたは=ANYを使用したサブクエリであること 単一のSELECT文でUNIONを使用していないこと Group byなどの集約関数
dbdiagram - Database Diagram As Code Draw ER diagrams by just writing code. Designed for developers and data analysts. dbdocs - Database Docs As Code Create web-based database documentation using code. Integrate seamlessly with your development workflow. dbml - Database Definition As Code Open-source DSL language designed to define and document database schemas and structures. Holistics.io - BI Re
この記事について みなさん、こんにちは!今日は新しく作ったRails7のActiveRecordからDBML(Database Markup Language)を出力するGem、「ActiveDBML」を紹介します。 Gemの詳細とダウンロードはこちらから: DBMLって何? DBMLとは、Database Markup Languageの略で、データベースのスキーマを表現するためのシンプルなマークアップ言語。テーブル、カラム、リレーションなどを視覚的に表現できるので、データベース設計の理解やコミュニケーションが容易になります。 弊社は、dbdocs.ioを活用してDB定義を行っています 詳しくはこちらの記事を参考: ActiveDBMLって何? ActiveDBMLは、データベース定義書と実際のデータベース設計との間のズレをなくすためのGemです。ActiveRecordで作ったモデルか
従業員データベース機能の開発を担当している渡邉です。最近公開したGemであるactiverecord-tenant-level-securityの紹介をします。 SmartHRにおけるマルチテナントの現在 私たちが開発するSmartHRはお客様ごとに1つの環境を提供する、マルチテナント型SaaSです。サービス全体で1つのデータベースを持ち、複数のテナントのデータが混ざらないように、SQLで問い合わせを行います。 1つの環境ごとに1つのデータベースを持つ方式は安全性の面で優れていますが、スキーマの保守やマイグレーションにかかる時間の増加など、多くの技術的な困難をもたらします。この選択の背景については、2018年に書かれた以下の記事もご覧ください。 tech.smarthr.jp とはいえ、常にテナントごとのWHERE句を意識しながらコードを書くのは大変ですし、不具合の温床になります。幸い、私
2022年10月13日にPostgreSQL 15 GA版がリリースされました。それに伴い、OSSデータベース技術者に大好評の篠田の虎の巻「PostgreSQL 15 GA 新機能検証結果」が公開されました。 今回も、英語版PDFと日本語版PDFの両方がダウンロード可能です。 篠田の虎の巻「PostgreSQL 15 GA 新機能検証結果 」英語版 篠田の虎の巻「PostgreSQL 15 GA 新機能検証結果」日本語版 PostgreSQL 15 はロジカル・レプリケーションやデータ圧縮機能が大きく拡張されました。ロジカル・レプリケーション機能の大幅強化に加えて200以上の新機能が実装されています。PostgreSQL 15の主な新機能は以下の通りです。 ■ 大規模環境に対する拡張 ベースバックアップ、WAL、pg_receivewal の圧縮にZStandardが利用可能にベース・バ
新機能 「QRコード読み取りによる出席機能」をリリースしました。事前に入場受付が必要な場合や、受付時に参加枠などによって個別の誘導が必要な場合にご利用ください。詳しくは こちら をご覧ください。 新機能 connpass APIに新しく、ユーザーのプロフィールを取得できるユーザーAPIを追加しました。APIリファレンスは こちら を、またAPI利用希望の方は こちら をご覧ください。 お知らせ 2024年9月1日より、connpassではスクレイピングを禁止し、利用規約に明記します。以降の情報取得にはconnpass APIをご利用ください。APIご利用にについてはヘルプページをご確認ください。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く