「ポストグレス」「ポストグレスキューエル」などとも読む。 オープンソース系RDBMS(Relational Database Management System) のひとつ。 最近のバージョンでは(SQL99の仕様に近い)オブジェクト指向リレーショナルデータベースとしての機能も充実してきており、その高機能さが特徴となっている。 同じオープンソース系RDBMSでも、機能よりも速度と扱いやすさを選んだMySQLとは対照的である。
PostgreSQL用の宣言的スキーママイグレーションツールのpistachioには、実在するスキーマを相手にした回帰テストがある。手書きのfixtureだけだと自分が思いつく形しかカバーできないので、OSSのスキーマをそのまま落としてきて食わせている。サンプルが40個になって、テーブル数の合計が4,117になった。 cf. sample-db-test.md やっていること make test-samples 一発で、サンプルごとに次を回す。 1. upstreamからスキーマを落としてロードする 2. pista dump -n <schemas> でロード済みスキーマをSQLに書き出す …
関連記事 概要 参考情報 関連記事 GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ · GitHub 概要 以下、自分用のメモです。知らなかったので、忘れないようメモメモ。。。 PostgreSQLで既存のテーブルの構造や制約をそのままコピーして新しいテーブルを作成する場合、以下のように出来るとのこと。 CREATE TABLE テーブル名 ( LIKE 元テーブル名 INCLUDING ALL ); www.postgresql.jp INCLUDING ALLとすると諸々全部コピー。上のドキュメントを確認すると、細かく指定出来るみたい…
SQLでSELECT、JOIN、GROUP BYを書けるようになると、次に気になるのが検索速度である。WHERE句に使う列へインデックスを作ればよいと思いがちだが、インデックスは保存領域を使い、INSERT・UPDATE・DELETE時にも更新される。数を増やせば必ず速くなる仕組みではない。 性能改善では、実際に遅いSQLと条件を固定し、実行計画、推定行数と実行行数、読み込んだ行、並べ替え、結合方法を確認する。その後に単一列・複合・部分インデックス等の候補を選び、同じ条件で再計測する。 結論として、最初はPostgreSQLまたはSQLiteの学習用データベースで、EXPLAINを読む練習から…
関連記事 概要 参考情報 関連記事 GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ · GitHub 概要 以下、自分用のメモです。忘れないうちにメモメモ。。。。 以下のサイトを知りました。昨今、よく聞くみたいな専用のミドルウェアとかを安易に増やさなくてもPostgreSQLだけで充分ジャネ?って訴えてくれていますね。スタンス的には Postgres は「何でも一番速い・一番良い」わけではないが、大半の現実的なアプリケーションでは十分に戦える汎用プラットフォームだよ って感じ。個人的には賛成。プログラムもアーキテクチャもシンプルな方がいい…
関連記事 概要 参考情報 関連記事 GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ · GitHub 概要 以下、自分用のメモです。忘れない内にメモメモ。。。 情けないことに最近になってようやく LATERAL という機能を知りました。。こんなのあったのですね。 使い方によってはとてもインパクトが出る調整が出来る機能なので是非マスターしたいところ。 以下、後で見返して勉強できるように情報源をメモメモ。。(順不同) www.postgresql.org lets.postgresql.jp tech.andpad.co.jp zenn.de…
PostgreSQL用の宣言的スキーママイグレーションツールのpistachioのv1.16.0をリリースした。 Windows対応がもっと大変かと思ったらあっさりできた。 github.com cf. 宣言的スキーマ管理ツール pistachio を作成しました 主な変更点 enumの値のリネーム対応 github.com CREATE TYPE public.status AS ENUM ( 'active', -- pista:renamed-from 'inactive' 'disabled' ); Windows対応(amd64のみ) github.com ignoreディレクティブ…
はじめに こんにちは、solaris チームでバックエンドを開発している大迫(m11o)です。 私たちが開発している solaris は、UPSIDER の法人カード基盤の一部を担うサービスです。UPSIDER では、自社で磨いてきた法人カード基盤を「パートナー企業が自社ブランドのカード事業を立ち上げられる形」(マルチブランド対応)で外部提供する取り組みを進めており、その基盤は複数のマイクロサービスで構成されています。solaris はその中でカード管理基盤、つまりカードの発行・利用枠の管理や VISA 決済処理まわりを担当しています。 この全体像(マルチブランド対応や、なぜマイクロサービスに…
関連記事 概要 参考情報 関連記事 GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ · GitHub 概要 以下、自分用のメモです。よく忘れるので、ここにメモメモ。。。 たまにクエリの実行時間だけ見たくて出力を捨てたいときがあります。 以下のようにすると、出力をすてて実行時間が直ぐ見れます。 \o /dev/null そのまんまですが、出力を /dev/null に向けて捨てます。この後にクエリを実行したらオッケイ。\timing on も付けておいたら実行時間だけ見れます。 元に戻す場合は \o とすれば戻ります。 昔ながらのやり方では…
こんにちは、デリッシュキッチン開発部の鈴木です。 概要 Data Definition Language(DDL、データ定義言語)、つまり CREATE TABLE や ALTER TABLE でスキーマを変更する操作を、トランザクションの中で実行してあとからロールバックできるかは、データベースによって違います。MySQL ではロールバックできず、PostgreSQL ではロールバックできます。 ロールバックは、1 つのトランザクションの中で行った変更を、記録しておいた変更前の状態に戻す操作です。だからロールバックするには、その操作が 1 つのトランザクションに収まっていること、そしてその変更…
関連記事 概要 参考情報 関連記事 GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ · GitHub 概要 以下、自分用のメモです。よく忘れるのでついでにここにメモメモ。。。 何かの検証作業とかやってて、頻繁にテーブルを作ったり消したりしているときに毎回頑張ってDROP TABLE書くのが面倒なときがあります。 そういうとき、個人的には以下のクエリをよく使っています。が、齢のせいかよく忘れます。なので、ここにメモ遺しておく。 DO $$ BEGIN EXECUTE ( SELECT string_agg('DROP TABLE IF EX…